[BOJ] 2178. 미로 탐색
풀이
#include <iostream>
#include <stdio.h>
#include <queue>
using namespace std;
typedef struct point{
int x;
int y;
} point;
int N, M;
int is_visit[101][101];
int map[101][101];
int maze[101][101];
queue<point> Q;
int d_x[] = {0, 1, 0, -1};
int d_y[] = {1, 0, -1, 0};
int is_visitable(int x, int y);
void bfs(int x, int y);
point make_point(int x, int y);
int main(){
cin >> N >> M;
for (int i = 1; i <= N; i++){
for(int j = 1; j <= M; j++){
scanf("%1d", &map[i][j]);
}
}
bfs(1, 1);
}
point make_point(int x, int y){
point p;
p.x = x; p.y = y;
return p;
}
void bfs(int x, int y){
is_visit[x][y] = 1;
Q.push(make_point(x, y));
maze[x][y] = 1;
while(!Q.empty()){
point p = Q.front();
int x = p.x;
int y = p.y;
Q.pop();
if(x == N && y == M){
cout << maze[x][y] << endl;
return;
}
for(int i = 0; i < 4; i++){
int next_x = x + d_x[i];
int next_y = y + d_y[i];
if(is_visitable(next_x, next_y)){
Q.push(make_point(next_x, next_y));
is_visit[next_x][next_y] = 1;
maze[next_x][next_y] = maze[x][y] + 1;
}
}
}
}
int is_visitable(int x, int y){
if(x >= 1 && x <= N && y >= 1 && y <= M && !is_visit[x][y] && map[x][y]) return 1;
return 0;
}
전에 풀었던 것보다 코드는 간결해지고 문제 풀이 시간은 줄었다.
Author And Source
이 문제에 관하여([BOJ] 2178. 미로 탐색), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kyoung99u/백준-2178-미로-탐색저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)