๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 1261๋ฒˆ - ์•Œ๊ณ ์ŠคํŒŸ

by dkswnkk 2021. 11. 2.
 

1261๋ฒˆ: ์•Œ๊ณ ์ŠคํŒŸ

์ฒซ์งธ ์ค„์— ๋ฏธ๋กœ์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ€๋กœ ํฌ๊ธฐ M, ์„ธ๋กœ ํฌ๊ธฐ N (1 ≤ N, M ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ๋ฏธ๋กœ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž 0๊ณผ 1์ด ์ฃผ์–ด์ง„๋‹ค. 0์€ ๋นˆ ๋ฐฉ์„ ์˜๋ฏธํ•˜๊ณ , 1์€ ๋ฒฝ์„ ์˜๋ฏธ

www.acmicpc.net

#include <iostream>
#include <queue>
using namespace std;

/*
 N,M์„ ํ†ต์ƒ์ ์ธ ์œ„์น˜๋กœ x,y๋กœ ์ผ๋‹ค๊ฐ€ ๋ฐ˜๋Œ€๋ผ๋Š” ๊ฑธ ์˜ˆ์ œ๋ฅผ ๋Œ๋ฆฌ๋‹ค๊ฐ€ ์•Œ์•˜๋‹ค. ๋ฌธ์ œ๋ฅผ ์ž์„ธํ•˜๊ฒŒ ๋ณด์ž.
 */
int N,M;
int map[101][101];
int visited[101][101];
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};


int bfs(int x,int y){
    visited[y][x]=1;
    priority_queue<pair<int,pair<int,int>>,vector<pair<int,pair<int,int>>>,greater<pair<int,pair<int,int>>>>pq;
    pq.push({0,{y,x}});

    while(!pq.empty()){

        int block=pq.top().first;
        int y=pq.top().second.first;
        int x=pq.top().second.second;

        if(x==M-1&&y==N-1){ //๋ชฉ์ ์ง€์ธ (N,M)์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ์ฆ๋ฃŒ
            return block;
        }
        pq.pop();
        for(int i=0; i<4; i++){
            int nx=x+dx[i];
            int ny=y+dy[i];
            if(nx>=0&&nx<M&&ny>=0&&ny<N&&!visited[ny][nx]){ //๋งต์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐ€์ง€ ์•Š๊ณ , ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์„๋•Œ
                visited[ny][nx]=1; //๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
                if(map[ny][nx]==0){
                    pq.push({block,{ny,nx}});   //๋ฒฝ์•ˆ๋ถ€์ˆ˜๊ณ  ์ด๋™
                }
                else{
                    pq.push({block+1,{ny,nx}}); //๋ฒฝ ํ•œ๊ฐœ ๋ถ€์ˆ˜๊ณ  ์ด๋™
                }

            }
        }
    }
    return 0;
}
int main(){

    cin>>M>>N;
    for(int i=0; i<N; i++){
        for(int k=0; k<M; k++){
            scanf("%1d",&map[i][k]);
        }
    }

    cout<< bfs(0,0);


}

๋Œ“๊ธ€