-
#include<iostream> #include<cstdio> #include<utility> #include<queue> #include<vector> int n, m; int a[101][101]; int d[101][101]; int dx[] = { 0,0,1,-1 }; int dy[] = { 1,-1,0,0 }; using namespace std; void bfs(int x, int y) { queue<pair<int, int>> q; q.push(make_pair(x, y)); int cnt = 1; d[x][y] = cnt; while (!q.empty()) { x = q.front().first; 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 < n && ny >= 0 && ny < m) { if (d[nx][ny] == 0&&a[nx][ny] == 1) { d[nx][ny] = d[x][y] + 1; q.push(make_pair(nx, ny)); } } } } } int main() { scanf("%d %d", &n, &m); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { scanf("%1d", &a[i][j]); d[i][j] = 0; } } bfs(0,0); /*for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { printf("%d ", d[i][j]); } printf("\n"); }*/ printf("%d\n", d[n - 1][m - 1]); return 0; }
기초 BFS