본문 바로가기
자료구조 & 알고리즘

[C++] 백준 2178 미로탐색

by 학식러 2023. 7. 30.
#include <bits/stdc++.h>
using namespace std;

int n, m;
string s;
int a[104][104];
int visited[104][104];
int y, x, c, d;

const int dy[] = {-1, 0, 1, 0};
const int dx[] = {0, 1, 0, -1};

void bfs(int y, int x){
	visited[y][x] = 1;
	queue<pair<int, int>> q;
	q.push({y, x});
	while(q.size()){
		tie(c, d) = q.front();
		q.pop();
		for(int i=0; i<4; i++){
			int ny = c+dy[i];
			int nx = d+dx[i];
			if(visited[ny][nx]) continue;
			if(ny<0 || ny>=n || nx<0 || nx>=m) continue;
			if(a[ny][nx] == 0) continue;
			visited[ny][nx] = visited[c][d] + 1;
			q.push({ny, nx});
		}
	}
}

int main(){
	cin >> n >> m;
	for(int i=0; i<n; i++){
		cin >> s;
		for(int j=0; j<m; j++){
			a[i][j] = s[j]-'0';
		}
	}
	bfs(0, 0);
	cout << visited[n-1][m-1];
	return 0;
}



댓글