๐Ÿ• Baaaaaarking/0x09๊ฐ• - BFS

[BOJ S1][C++] ๋ฐฑ์ค€ 2178๋ฒˆ : ๋ฏธ๋กœ ํƒ์ƒ‰

์„ ๋‹ฌ 2022. 3. 8. 10:35
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/2178

 

2178๋ฒˆ: ๋ฏธ๋กœ ํƒ์ƒ‰

์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ N, M(2 ≤ N, M ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” M๊ฐœ์˜ ์ •์ˆ˜๋กœ ๋ฏธ๋กœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ ์ˆ˜๋“ค์€ ๋ถ™์–ด์„œ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ

N×Mํฌ๊ธฐ์˜ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„๋˜๋Š” ๋ฏธ๋กœ๊ฐ€ ์žˆ๋‹ค.

1 0 1 1 1 1
1 0 1 0 1 0
1 0 1 0 1 1
1 1 1 0 1 1

๋ฏธ๋กœ์—์„œ 1์€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์„ ๋‚˜ํƒ€๋‚ด๊ณ , 0์€ ์ด๋™ํ•  ์ˆ˜ ์—†๋Š” ์นธ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฏธ๋กœ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, (1, 1)์—์„œ ์ถœ๋ฐœํ•˜์—ฌ (N, M)์˜ ์œ„์น˜๋กœ ์ด๋™ํ•  ๋•Œ ์ง€๋‚˜์•ผ ํ•˜๋Š” ์ตœ์†Œ์˜ ์นธ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ํ•œ ์นธ์—์„œ ๋‹ค๋ฅธ ์นธ์œผ๋กœ ์ด๋™ํ•  ๋•Œ, ์„œ๋กœ ์ธ์ ‘ํ•œ ์นธ์œผ๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„์˜ ์˜ˆ์—์„œ๋Š” 15์นธ์„ ์ง€๋‚˜์•ผ (N, M)์˜ ์œ„์น˜๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ์นธ์„ ์…€ ๋•Œ์—๋Š” ์‹œ์ž‘ ์œ„์น˜์™€ ๋„์ฐฉ ์œ„์น˜๋„ ํฌํ•จํ•œ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ N, M(2 ≤ N, M ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” M๊ฐœ์˜ ์ •์ˆ˜๋กœ ๋ฏธ๋กœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ ์ˆ˜๋“ค์€ ๋ถ™์–ด์„œ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ง€๋‚˜์•ผ ํ•˜๋Š” ์ตœ์†Œ์˜ ์นธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ํ•ญ์ƒ ๋„์ฐฉ์œ„์น˜๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

 

ํ’€์ด

BFS ํ‹€์„ ์žก์•„๋‘๊ณ 

[๐Ÿ• Baaaaaarking/0x09๊ฐ• - BFS] - [BOJ S1][C++] ๋ฐฑ์ค€ 1926๋ฒˆ : ๊ทธ๋ฆผ

 

[BOJ S1][C++] ๋ฐฑ์ค€ 1926๋ฒˆ : ๊ทธ๋ฆผ

https://www.acmicpc.net/problem/1926 1926๋ฒˆ: ๊ทธ๋ฆผ ์–ด๋–ค ํฐ ๋„ํ™”์ง€์— ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ ์žˆ์„ ๋•Œ, ๊ทธ ๊ทธ๋ฆผ์˜ ๊ฐœ์ˆ˜์™€, ๊ทธ ๊ทธ๋ฆผ ์ค‘ ๋„“์ด๊ฐ€ ๊ฐ€์žฅ ๋„“์€ ๊ฒƒ์˜ ๋„“์ด๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ๋ผ. ๋‹จ, ๊ทธ๋ฆผ์ด๋ผ๋Š” ๊ฒƒ์€ 1๋กœ ์—ฐ๊ฒฐ๋œ ๊ฒƒ์„

whkakrkr.tistory.com

 

vis ๋กœ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋งŒ ํ‘œ์‹œํ•˜๋˜๊ฒƒ์„ dis ๋กœ ํ•ด๋‹น ์ง€์ ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ํ‘œ์‹œํ•œ๋‹ค

(1) ์ฒ˜์Œ ์ดˆ๊ธฐํ™” ํ•  ๋•Œ ์•„์˜ˆ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์€ -1 ๋กœ ํ•ด๋‘ฌ์•ผ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋„ ๋™์‹œ์— ์ฒดํฌ ๊ฐ€๋Šฅ

 

๋งจ์ฒ˜์Œ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค๊ฐ€ ๋‚˜์™€์„œ ์–ด๋ฆฌ๋‘ฅ์ ˆ ํ–ˆ๋Š”๋ฐ

์ž…๋ ฅ์„ ๋ฐ›์„ ๋•Œ ๊ณต๋ฐฑ ์—†์ด ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— string ์œผ๋กœ ์ž…๋ ฅ๋ฐ›์•˜๋‹ค

(2) board ๊ฐ€ char ์ธ๊ฑธ ์žŠ์ง€ ๋ง๊ณ  0 ์ด ์•„๋‹Œ '0' ์œผ๋กœ ์ž˜ ์ž…๋ ฅ๋ฐ›์ž

 

// Authored by : seondal
// ํ’€์ด : https://whkakrkr.tistory.com/
// Co-authored by : -

//#include <bits/stdc++.h>
#include <iostream>
#include <queue>

using namespace std;

string board[101];
int dis[101][101];

int dx[4] = {1,0,-1,0};
int dy[4] = {0,1,0,-1};

int main() {
    // ์ž…๋ ฅ
    int n, m;
    cin >> n >> m;
    for(int i=0; i<n; i++) cin >> board[i];
    
    // (1) dis ์ดˆ๊ธฐํ™”
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++)
            dis[i][j] = -1;
    
    // ํ’€์ด
    queue<pair<int, int>> q;
    q.push({0,0});
    dis[0][0] = 0;
    
    while(!q.empty()){
        pair<int, int> cur = q.front();
        q.pop();
        
        for(int dir=0; dir<4; dir++){
            int x = cur.first + dx[dir];
            int y = cur.second + dy[dir];
            if(x < 0 || x >= n || y < 0 || y >= m) continue;
            if(board[x][y] == '0' || dis[x][y] > 0) continue; // (2)
            dis[x][y] = dis[cur.first][cur.second] + 1;
            q.push({x,y});
        }
    }
    
    // ์ถœ๋ ฅ
    cout << dis[n-1][m-1] + 1;
    
    return 0;
}

/*
 */
๋ฐ˜์‘ํ˜•