PS
BOJ - 2178. 미로 (C++)
kugnuoy
2024. 3. 15. 18:18
2178. BFS
https://www.acmicpc.net/problem/2178
2178번: 미로 탐색
첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.
www.acmicpc.net
[풀이]
각행의 수들은 붙어서 입력이 들어온다. 이러한 경우 이중 for문을 통해 입력받는 방법을 코드로 확인할 수 있다.
2차원 배열 board을 선언할 때부터 문자열의 배열로 선언할 수도 있지만 더욱 실수할 확률이 높다.
뿐만 아니라 각 칸의 dist 배열을 2차원으로 초기화하는데 이중 for문이 필요하기 때문에 같이 사용하면 된다.
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
int board[502][502];
int n,m;
int dx[4] = {1,0,-1,0};
int dy[4] = {0,1,0,-1};
int dist[502][502];
int main(){
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> m;
for (int i=0; i<n; i++){
string tmp; cin >> tmp;
for (int j=0; j<m; j++) {
board[i][j] = tmp[j] - '0';
dist[i][j] = -1;
}
}
queue<pair<int, int>> Q;
Q.push({0,0});
dist[0][0] = 0;
while(Q.size()){
pair<int,int> cur = Q.front(); Q.pop();
for (int dir=0; dir<4; dir++){
int nx = cur.X + dx[dir];
int ny = cur.Y + dy[dir];
if (nx >= n || nx < 0 || ny >= m || nx < 0) continue;
if (dist[nx][ny]!=-1 || board[nx][ny]==0) continue;
Q.push({nx,ny});
dist[nx][ny] = dist[cur.X][cur.Y] + 1;
}
}
cout << dist[n-1][m-1]+1;
}