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

[BOJ S2][C++] ๋ฐฑ์ค€ 7562๋ฒˆ: ๋‚˜์ดํŠธ์˜ ์ด๋™

์„ ๋‹ฌ 2022. 3. 15. 20:45
๋ฐ˜์‘ํ˜•

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

 

7562๋ฒˆ: ๋‚˜์ดํŠธ์˜ ์ด๋™

์ฒด์ŠคํŒ ์œ„์— ํ•œ ๋‚˜์ดํŠธ๊ฐ€ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ๋‚˜์ดํŠธ๊ฐ€ ํ•œ ๋ฒˆ์— ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์€ ์•„๋ž˜ ๊ทธ๋ฆผ์— ๋‚˜์™€์žˆ๋‹ค. ๋‚˜์ดํŠธ๊ฐ€ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์นธ์ด ์ฃผ์–ด์ง„๋‹ค. ๋‚˜์ดํŠธ๋Š” ๋ช‡ ๋ฒˆ ์›€์ง์ด๋ฉด ์ด ์นธ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜

www.acmicpc.net

 

๋ฌธ์ œ

์ฒด์ŠคํŒ ์œ„์— ํ•œ ๋‚˜์ดํŠธ๊ฐ€ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ๋‚˜์ดํŠธ๊ฐ€ ํ•œ ๋ฒˆ์— ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์€ ์•„๋ž˜ ๊ทธ๋ฆผ์— ๋‚˜์™€์žˆ๋‹ค. ๋‚˜์ดํŠธ๊ฐ€ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์นธ์ด ์ฃผ์–ด์ง„๋‹ค. ๋‚˜์ดํŠธ๋Š” ๋ช‡ ๋ฒˆ ์›€์ง์ด๋ฉด ์ด ์นธ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

์ž…๋ ฅ

์ž…๋ ฅ์˜ ์ฒซ์งธ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ์„ธ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ฒซ์งธ ์ค„์—๋Š” ์ฒด์ŠคํŒ์˜ ํ•œ ๋ณ€์˜ ๊ธธ์ด l(4 ≤ l ≤ 300)์ด ์ฃผ์–ด์ง„๋‹ค. ์ฒด์ŠคํŒ์˜ ํฌ๊ธฐ๋Š” l × l์ด๋‹ค. ์ฒด์ŠคํŒ์˜ ๊ฐ ์นธ์€ ๋‘ ์ˆ˜์˜ ์Œ {0, ..., l-1} × {0, ..., l-1}๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๋‘˜์งธ ์ค„๊ณผ ์…‹์งธ ์ค„์—๋Š” ๋‚˜์ดํŠธ๊ฐ€ ํ˜„์žฌ ์žˆ๋Š” ์นธ, ๋‚˜์ดํŠธ๊ฐ€ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์นธ์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ๋‚˜์ดํŠธ๊ฐ€ ์ตœ์†Œ ๋ช‡ ๋ฒˆ๋งŒ์— ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

BFS ์ด์šฉํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‹จ ๋‚˜์ดํŠธ์˜ ์ด๋™๋ฐฉํ–ฅ์— ๋งž๊ฒŒ dx dy ๋ฐฐ์—ด๋“ค์„ ์„ค์ •ํ•ด์ฃผ๊ณ 

์ด์ฐจ์› ๋ฐฐ์—ด์€ ๊ฑฐ๋ฆฌ๋งŒ ๋‹ด์•„๋„ ์ถฉ๋ถ„ํ•˜๋‹ค.

์•ฝ๊ฐ„์˜ ๋ณ€ํ˜•์ด ๊ฐ€ํ•ด์ง„ BFS ๋ฌธ์ œ

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

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

using namespace std;

int dis[302][302];

int dx[8] = {-2, -1, 1, 2, -2, -1, 1, 2};
int dy[8] = {1, 2, 2, 1, -1, -2, -2, -1};

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    int t;
    cin >> t;
    while(t--){
        queue<pair<int, int>> q;
        int n, a, b;
        
        cin >> n;  // ์นธ ์„ค์ •
        
        // ์ดˆ๊ธฐํ™”
        for(int i=0; i<n; i++){
            for(int j=0; j<n; j++){
                dis[i][j] = -1;
            }
        }
        
        cin >> a >> b;  // ์ถœ๋ฐœ์ง€ ์„ค์ •
        dis[a][b] = 0;
        q.push({a,b});
    
        cin >> a >> b;  // ๋„์ฐฉ์ง€ ์„ค์ •
        
        while(!q.empty()){
            pair<int, int> current = q.front();
            q.pop();
            
            for(int dir=0; dir<8; dir++){
                int x = current.first + dx[dir];
                int y = current.second + dy[dir];
                
                if(x<0 || x>=n || y<0 || y>=n) continue;
                if(dis[x][y] >= 0) continue;
                dis[x][y] = dis[current.first][current.second] + 1;
                q.push({x,y});
            }
        }
        
        cout << dis[a][b] << "\n";
    }
    return 0;
}

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