728x90
#include<iostream>
#include<queue>
#define MAX 301
using namespace std;
int dX[] = { 2,-2, 1,-1, 2 , -1 , -2 , 1};
int dY[] = { 1,-1,2,-2, -1 , 2 , 1 , -2};
int dis[MAX][MAX] = { 0 ,};
bool visited[MAX][MAX] = { false, };
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int N;
int Size;
int nightX, nightY;
int desX, desY;
cin >> N;
for (int i = 0; i < N; i++) {
queue<pair<int, int>> Q;
cin >> Size >> nightX >> nightY >> desX >> desY;
for (int i = 0; i < Size; i++) {
for (int j = 0; j < Size; j++) {
dis[i][j] = 0;
visited[i][j] = false;
}
}
Q.push(make_pair(nightX, nightY));
while (!Q.empty()) {
int x = Q.front().first;
int y = Q.front().second;
Q.pop();
if (x == desX && y == desY) {
cout << dis[x][y] << '\n';
break;
}
for (int i = 0; i < 8; i++) {
int nnx = x + dX[i];
int nny = y + dY[i];
if (nnx > -1 && nnx < Size && nny > -1 && nny < Size && visited[nnx][nny] == false) {
Q.push(make_pair(nnx, nny));
dis[nnx][nny] = dis[x][y] + 1;
visited[nnx][nny] = true;
}
}
}
}
}
평범한 BFS문제이지만 4방향이 아닌 8방향으로 이동해야하고 한번출력이 아닌 여러번 출력이 가능해야한다. 그러므로 큐를 끝날때마다 비워주거나 지역변수로 다시 선언해야한다.
그리고 가장 중요한 것 ...
'백준 문제 풀이' 카테고리의 다른 글
백준 1475번 방 번호 (C++) (0) | 2022.11.25 |
---|---|
백준 2805번 나무 자르기(C++) (2) | 2022.10.29 |
백준 1261번 알고스팟(C++) (0) | 2022.10.12 |
백준 13549 숨바꼭질3 (C++) (0) | 2022.10.10 |
백준 7576번 토마토(C++) (1) | 2022.10.05 |