풀이과정
bfs의 가장 기본 알고리즘이다.
만약 dist[maps.size() - 1]maps[0].size() - 1] 부분이 0이라면
도달하지 못했다는 뜻이므로 -1을 리턴해준다.
#include <vector>
#include <queue>
using namespace std;
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, -1, 0, 1};
int dist[101][101];
int bfs(int x, int y, vector<vector<int>> maps){
queue<pair<int, int>> q;
q.push({x, y});
dist[x][y] = 1;
while(!q.empty()){
int x = q.front().first;
int y = q.front().second;
q.pop();
for(int i = 0; i < 4; i++){
int nx = x + dx[i];
int ny = y + dy[i];
if(nx < 0 || nx > maps.size() - 1 || ny < 0 || ny > maps[0].size() - 1)
continue;
if(!dist[nx][ny] && maps[nx][ny] == 1){
q.push({nx, ny});
dist[nx][ny] = dist[x][y] + 1;
}
}
}
return dist[maps.size() - 1][maps[0].size() - 1];
}
int solution(vector<vector<int>> maps)
{
int answer = 0;
answer = bfs(0, 0, maps);
if(!answer) answer = -1;
return answer;
}
'🍞 Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스][Level2] 더 맵게 c++ (0) | 2022.10.20 |
---|---|
[프로그래머스][Level2] 다음 큰 숫자 c++ (0) | 2022.10.20 |
[프로그래머스][Level2] 124 나라의 숫자 c++ (0) | 2022.10.20 |
[프로그래머스][Level2] 2개 이하로 다른 비트 c++ (0) | 2022.10.20 |
[프로그래머스][Level2] 2 x n 타일링 c++ (0) | 2022.10.20 |