반응형
2178번: 미로 탐색
첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.
www.acmicpc.net
BFS 문제
입력을 string으로 받는다.
한 칸씩 이동할 때마다 카운트를 하며 맨 처음 시작부터 각 칸까지의 거리를 저장한다.
#include <iostream>
#include <queue>
#include <string>
using namespace std;
string board[102];
int dist[102][102];
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
int main(void){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>board[i];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
dist[i][j]=-1;
queue <pair<int,int>> q;
q.push({0,0});
dist[0][0]=0;
while(!q.empty()){
pair<int,int> cur=q.front();
q.pop();
for(int dir=0; dir<4; dir++){
int nx=cur.first+dx[dir];
int ny=cur.second+dy[dir];
if(nx<0||ny<0||nx>=n||ny>=m) continue;
if(dist[nx][ny]!=-1||board[nx][ny]!='1') continue;
dist[nx][ny]=dist[cur.first][cur.second]+1;
q.push({nx,ny});
}
}
cout<<dist[n-1][m-1]+1;
}
바킹독님의 BFS 설명글을 참고했습니다.
반응형
'알고리즘' 카테고리의 다른 글
[백준/1692번][C++] 곱셈 (0) | 2021.01.29 |
---|---|
[백준/4179번][C++] 불! (0) | 2021.01.28 |
[백준/1926번][C++] 그림 (0) | 2021.01.28 |
[백준/10773번][C++] 제로 (0) | 2021.01.25 |
[백준/5397번][C++] 키로거 (0) | 2021.01.25 |