보글보글 개발일지
article thumbnail
반응형

www.acmicpc.net/problem/2178

 

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
profile

보글보글 개발일지

@보글

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!