백준알고리즘

미로탐색

먼지의삶 2019. 8. 1. 05:45
#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