728x90
반응형
https://www.youtube.com/watch?v=7C9RgOcvkvo&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=4
#include <bits/stdc++.h>
using namespace std;
int n, m;
int graph[201][201];
// 이동할 네가지 방향 정의(상 하 좌 우)
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
int bfs(int x, int y){
// 큐 구현을 위해 queue 라이브러리 사용
queue<pair<int, int>> q;
q.push({x,y});
// 큐가 빌 때까지 반복
while(!q.empty()){
int x = q.front().first;
int y = q.front().second;
q.pop();
// 현재 위치에서 4가지 방향으로의 위치 확인
for(int i=0; i<4; i++){
int nx = x + dx[i];
int ny = y + dy[i];
// 미로 찾기 공간을 벗어난 경우 무시
if(nx<0 || nx>=n || ny<0 || ny>=m) continue;
// 벽인 경우 무시
if(graph[nx][ny]==0) continue;
// 해당 노드를 처음 방문하는 경우에만 최단 거리 기록
if(graph[nx][ny] == 1){
graph[nx][ny] = graph[x][y] + 1;
q.push({nx, ny});
}
}
}
// 가장 오른쪽 아래까지의 최단 거리 반환
return graph[n-1][m-1];
}
int main(void) {
cin >> n >> m;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
scanf("%1d", &graph[i][j]);
}
}
cout << bfs(0, 0) << endl;
return 0;
}
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준/ DFS&BFS/ C++] 11724번 연결 요소의 개수 (0) | 2022.12.29 |
---|---|
[백준/ DFS&BFS/ C++] 1260번 DFS와 BFS (0) | 2022.12.28 |
[이코테/ DFS&BFS/ C++] 음료수 얼려 먹기 (0) | 2022.12.28 |
[이코테/DFS&BFS/C++] DFS & BFS 기초 설명 및 예제 (0) | 2022.12.28 |
[백준/DP/C++] 11052번 카드 구매하기 (0) | 2022.12.28 |