알고리즘/백준 BAEK JOON
2178. 미로탐색
IMyoungho
2020. 3. 15. 01:06
이번에 풀어볼 문제는 백준의 2178 미로탐색이다.
2178번: 미로 탐색
첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.
www.acmicpc.net
DFS를 이용하여 문제를 풀었다.
< Code 설명 >
#include <iostream>
#include <queue>
using namespace std;
#define MAX 100
int dx[4]={-1,1,0,0}; // X 좌표 이동범위
int dy[4]={0,0,-1,1}; // Y 좌표 이동범위
// -> 상하좌우
int arr[MAX][MAX]; // 미로
int n, m;
void bfs(int v, int w){
queue<pair<int,int>>q;
q.push(make_pair(0,0));
while(!q.empty()){
v=q.front().first; // x좌표
w=q.front().second; // y좌표
q.pop(); // 필요한 x,y좌표 저장했으니 queue에서 꺼냄
for(int i=0; i<4; i++){ // 4방향을 탐색함(즉, 길(1)을 찾는 것)
int nx = v+dx[i];
int ny = w+dy[i];
if(nx < 0 || ny < 0 || nx > n-1 || ny > m-1) //탐색 범위 벗어날경우
continue;
if(arr[nx][ny]==1){ // 길이 있을 경우
q.push(make_pair(nx,ny)); // queue에 넣어줌
arr[nx][ny]=arr[v][w]+1; // 이동했기 때문에 +1
}
}
}
}
int main() {
cin >> n >> m;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
scanf("%1d",&arr[i][j]);
}
}
bfs(0,0);
cout << arr[n-1][m-1] << endl; // 우리가 구하는 n,m좌표의 결과 출력
return 0;
}
반드시 알아야할 TIP!!
-> 최단거리에 대한 문제를 어떻게 접근할지 고민하기
-> 좌표탐색을 생각해야함 즉, 상하좌우탐색 -> 대각선 탐색 문제도 존재할 것으로 예상
반응형