1. ๋ฌธ์
BFS๋ก ํ ์ ์๋ ๋ฌธ์ ๋ค.
- ์ต์ ์ด๋ ํ์๋ฅผ ๊ตฌํจ
- ์ด๋ํ ๊ฒฝ๋ก๊ฐ
(r-2,c-1)
,(r-2,c+1)
,(r,c-2)
,(r,c+2)
,(r+2,c-1)
,(r+2,c+1)
์ค ํ ์นธ์ ๊ณ ๋ฅด๋ ๊ฒ์ - ์์์ ๊ณผ ๋์ฐฉ์ ์์น ์ ๊ณต
- ์ฒด์คํ์ ํฌ๊ธฐ ์ ํ
2. ํด๊ฒฐ ๊ณผ์
BFS์ ํ์ฉํ ๋ฏธ๋ก ํ์ ์ ํ๊ณผ ํฐ ์ฐจ์ด ์์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
BFS/DFS ๋ฌธ์ ํด๊ฒฐ ์ ํ
- ์ต์ ํ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์
- ํ๋์ ์ ์ ์์ ์์ํด ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ ์ ๋ฐฉ๋ฌธ
์ต์ ์ ๊ฒฝ์ฐ ๋ชจ๋ ์ฒด์คํ์ ์นธ์ ๋ฐฉ๋ฌธํด์ผ ํ๋ฏ๋ก ์ ์ฒด ์ ์ ์ ๊ฐ์๋ $N^{2}$, BFS๊ฐ ์ ์ ์ ํ ๋ฒ์ฉ ๊ณ์ฐํ๋ฉด ์๊ฐ ๋ณต์ก๋๋ $O(N^{2})$์ด ๋๋ค.
N์ ์ต๋ ํฌ๊ธฐ๊ฐ 200์ด๋ฏ๋ก ์ ํ ์๊ฐ ์์ ์ถฉ๋ถํ ์ต์ ๊ฒฝ๋ก๋ฅผ ํ์ํ ์ ์๋ค.
๋ฏธ๋ก ํ์ ๋ฌธ์ ์ ๋ค๋ฅธ์
x
,y
์ด๋ ๋ฒ์- ๋ฐ์ค๋์ดํธ์ ๋ง๊ฒ ์๋ ์์น
dx
,dy
๋ฐฐ์ด ํ์ฅ
- ๋ฐ์ค๋์ดํธ์ ๋ง๊ฒ ์๋ ์์น
- ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ -1 ์ถ๋ ฅ
3. ์ฝ๋
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
#include <stdio.h>
#include <iostream>
#include <queue>
using namespace std;
int n, r1, c1, r2, c2, x, y, nx, ny, i;
int dx[] = { -2, -2, 0, 0, 2, 2 };
int dy[] = { -1, 1, -2, 2, -1, 1 };
int dist[200][200] = { 0, };
queue<pair<int, int>> q;
int main()
{
scanf("%d %d %d %d %d", &n, &r1, &c1, &r2, &c2);
q.push(make_pair(r1, c1));
while (!q.empty())
{
x = q.front().first;
y = q.front().second;
q.pop();
for (i = 0; i < 6; i++)
{
nx = x + dx[i];
ny = y + dy[i];
if (nx < 0 || nx >= n || ny < 0 || ny >= n) continue;
if (dist[nx][ny] == 0)
{
q.push(make_pair(nx, ny));
dist[nx][ny] = dist[x][y] + 1;
}
}
}
if (dist[r2][c2] == 0) printf("-1");
else printf("%d", dist[r2][c2]);
}
4. ์๊ฐ ์ ๋ฆฌ
์ฝ๋ ์์ฑ๋ณด๋ค ๋ฌธ์ ๋ฅผ ์ ๋๋ก ๊ทธ๋ ค๋ณด๋๋ฐ ์๊ฐ์ ๋ ์ผ๋ค. ๋ฌธ์ ์ ๋ฏ์ ์ ๋ณด๊ฐ ๋ณด์ด๋ฉด ์ ๋ ๋นํฉํด ์ดํดํ๋๋ฐ ์ค๋ ๊ฑธ๋ฆฐ๋ค. ์๋ก ๋ค์ด์ค๋ ์ ๋ณด๋ฅผ ๋ฌด์์ ์ฐจ๋จํ๋ ค ํ์ง ๋ง๊ณ ์๊ณ ๋ฆฌ์ฆ ์ง์๊ณผ ์ ์ฎ์ด๋ณด์.
ํนํ BFS ์ค๋ฒ ๋ฌธ์ ๋ ๊ธฐ๋ณธ ์๊ณ ๋ฆฌ์ฆ ์ฝ๋์ ํฐ ๋ณํ ์์ด ์ฝ๊ฒ ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค. ์ค๋ฒ ๋ฌธ์ ๋ก ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋ค์ง๊ณ ๋์ ๋ค์ํ ํ์ฅ ๋ฌธ์ ๋ ๋์ ํด๋ณด์.๐ฅฐ
Leave a comment