알고리즘/DFS & BFS

백준[2178] 미로 탐색

HJ39 2023. 1. 11. 14:20

bfs를 살짝 응용한 문제이다. bfs를 사용할 때 무언가 움직여서 확인하려면 행,열에 대해서 배열을 생성한 후 사용하면 쉽게 아이디어를 생각할 수 있다.

 

□ 소스 코드

#include <bits/stdc++.h>

int mazeN,mazeM;
int mazeList[100][100]{0};

void bfs2178(int x,int y){
    queue<pair<int, int>> mazeQ;
    int mvX[] = {-1,1,0,0};
    int mvY[] = {0,0,-1,1};
    mazeQ.push({x,y});
    
    while (!mazeQ.empty()) {
        x = mazeQ.front().first;
        y = mazeQ.front().second;
        mazeQ.pop();
        
        for(int i=0;i<4;i++){
            int dX = mvX[i] + x;
            int dY = mvY[i] + y;
            
            if(dX < 0|| dY <0 || dX >= mazeN || dY >=mazeM )
                continue;
            
            if(mazeList[dX][dY] == 0)
                continue;
            
            if(mazeList[dX][dY] == 1){
                mazeQ.push({dX,dY});
                mazeList[dX][dY] = mazeList[x][y] + 1;
            }
        }
        
    }
}

void findMaze(){
    scanf("%d%d",&mazeN,&mazeM);
    
    for(int i=0;i<mazeN;i++){
        for(int j=0;j<mazeM;j++){
            scanf("%1d",&mazeList[i][j]);
        }
    }
    bfs2178(0,0);
    cout<<mazeList[mazeN-1][mazeM-1]<<endl;   
}

'알고리즘 > DFS & BFS' 카테고리의 다른 글

백준[7562] 나이트의 이동  (0) 2023.01.25
백준[1697] 숨바꼭질  (0) 2023.01.24
백준 [1012] 유기농 배추  (0) 2023.01.11
백준[2667] 단지번호붙이기  (0) 2023.01.11
백준[1260] DFS와 BFS  (0) 2023.01.11