[C++]BOJ 7562 - 나이트의 이동

[C++]BOJ 7562 - 나이트의 이동

나이트가 이동할 수 있는 자리를 bfs나 dfs로 탐색해나가다 도착점까지의 이동횟수를 출력하면 된다.
테스트케이스가 여러개라서 이 부분을 깔끔하게 처리해야한다.


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
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int dx[] = {1, 2, 2, 1, -1, -2, -2, -1}, dy[] = {2, 1, -1, -2, -2, -1, 1, 2};
int t, l, x1, y1, x2, y2, cx, cy, xx, yy, arr[302][302];
queue<int> qx, qy;
int main() {
cin >> t;
while(t--) {
cin >> l >> x1 >> y1 >> x2 >> y2;
arr[y1][x1] = 1;
qx.push(x1), qy.push(y1);
while(!qx.empty()) {
cx = qx.front(); qx.pop();
cy = qy.front(); qy.pop();
for(int i = 0; i < 8; i++) {
xx = cx + dx[i]; yy = cy + dy[i];
if(xx >= l || yy >= l || xx < 0 || yy < 0 || arr[yy][xx]) continue;
qx.push(xx), qy.push(yy);
arr[yy][xx] = arr[cy][cx] + 1;
}
}
cout << arr[y2][x2] - 1 << endl;
memset(arr, 0, sizeof(arr));
}
}