[백준-2178] 미로 탐색


BFS/DFS 경로 탐색 알고리즘의 기본 문제이다.

수도코드 형식으로 Flow를 거의 외우다 시피 하면 좋다.

Code


#include <iostream>
#include <queue>
#define MAX 101
using namespace std;

int N, M;
int map[MAX][MAX];
int check[MAX][MAX];
int dx[] = { -1,1,0,0 }, dy[] = { 0,0,-1,1 };
queue<pair<int, int>> q;

void bfs(int y, int x) {
	q.push(pair<int, int>(y, x));
	check[y][x] = 1;
	while (!q.empty()) {
		int now_y = q.front().first;
		int now_x = q.front().second;
		q.pop();

		if ((now_y == N - 1) && (now_x == M - 1)) break;

		for (int i = 0; i < 4; i++) {
			int nx = now_x + dx[i], ny = now_y + dy[i];
			if (nx <0 || nx>M - 1 || ny<0 || ny>N - 1) continue;
			if (map[ny][nx] && !check[ny][nx]) {
				check[ny][nx] = check[now_y][now_x] + 1;
				q.push(pair<int, int>(ny, nx));
			}
		}
	}
	
}

int main() {
	scanf("%d %d", &N, &M);
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < M; j++)
			scanf("%1d", &map[i][j]);
	}
	bfs(0, 0);
	printf("%d", check[N - 1][M - 1]);
	return 0;
}





© 2020. by Andyworkingholiday

Powered by aiden