본문 바로가기

백준/그래프

백준 7562 - 나이트의 이동

728x90
728x90

www.acmicpc.net/problem/7562

 

각 테스트 케이스마다 bfs를 수행하여 나이트의 최소 이동 횟수를 찾으면 된다.

 

전체 코드

더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <bits/stdc++.h>
 
using namespace std;
using ll = long long;
 
int t;
int n;
int a, b, c, d;
int cnt;
bool vst[300][300];
int nxt[8][2]
{
    {12},
    {1-2},
    {21},
    {2-1},
    {-12},
    {-1-2},
    {-21},
    {-2-1}
};
 
void bfs(int x, int y);
inline int mtdist(int a, int b, int c, int d) { return abs(a - c) + abs(d - b); }
 
int main()
{
    cin.tie(0); ios::sync_with_stdio(false);
    cin >> t;
 
    while (t--)
    {
        memset(vst, 0sizeof vst);
        cnt = 1e9;
        cin >> n >> a >> b >> c >> d;
        vst[a][b] = 1;
        bfs(a, b);
 
        cout << cnt << '\n';
    }
}
 
void bfs(int x, int y)
{
    queue<vector<int>> q;
    q.push({x, y, 0});
 
    while (q.size())
    {
        auto cur = q.front();
        q.pop();
 
        if (cur[0== c && cur[1== d)
        {
            cnt = min(cnt, cur[2]);
            return;
        }
 
        for (int i = 0; i < 8++i)
        {
            int nx = cur[0+ nxt[i][0], ny = cur[1+ nxt[i][1];
            if (nx < 0 || ny < 0 || nx >= n || ny >= n || vst[nx][ny])
                continue;
 
            vst[nx][ny] = 1;
            q.push({nx, ny, cur[2+ 1});
        }
    }
}
cs

 

728x90
728x90

'백준 > 그래프' 카테고리의 다른 글

백준 16928 - 뱀과 사다리 게임  (0) 2021.07.03
[KOI] 백준 2644 - 촌수계산  (0) 2021.06.28
백준 20530 - 양분  (0) 2021.01.01
[USACO] 백준 15591 - MooTube (Silver)  (0) 2020.11.14
백준 1738 - 골목길  (0) 2020.10.01