쉬운 문제였는데 테스트 케이스 중간에 멈추길래 뭔가 했는데
그래프를 초기화하지 않아서 그랬던 것이었음.. 테스트케이스 여러번 돌릴 땐 초기화를 잘 하자
#include<iostream>
#include<queue>
using namespace std;
int l, ax, ay, bx, by, sum;
int graph[300][300];
// 나이트의 이동 가능 범위
int dx[8] = { 1, 1, 2, 2, -1, -1, -2, -2 };
int dy[8] = { 2, -2, 1, -1, 2, -2, 1, -1 };
// 최단거리니까 bfs
void bfs(int x, int y) {
queue<pair<int, int>> q;
q.push({ x, y });
while (!q.empty()) {
int nx = q.front().first;
int ny = q.front().second;
q.pop();
if (nx == bx && ny == by) {
cout << graph[nx][ny] - 1 << "\n";;
return;
}
for (int i = 0; i < 8; i++) {
if ((nx + dx[i]) >= 0 && (nx + dx[i]) < l &&
(ny + dy[i]) >= 0 && (ny + dy[i]) < l &&
graph[nx + dx[i]][ny + dy[i]] == 0) {
q.push({ nx + dx[i], ny + dy[i] });
graph[nx + dx[i]][ny + dy[i]] = graph[nx][ny] + 1;
}
}
}
}
int main(){
int t;
cin >> t;
while (t--) {
for (int i = 0; i < 300; i++) {
for (int j = 0; j < 300; j++) {
graph[i][j] = 0;
}
}
cin >> l;
cin >> ax >> ay;
cin >> bx >> by;
graph[ax][ay] = 1;
bfs(ax, ay);
}
}
'에러 잡기 > 문제 풀이' 카테고리의 다른 글
백준 13913 숨바꼭질4 (0) | 2021.04.09 |
---|---|
백준 12851 숨바꼭질 2 (0) | 2021.04.03 |
백준 16953 A->B (0) | 2021.03.30 |
백준 1012 유기농 배추 (0) | 2021.03.24 |
백준 1697 숨바꼭질 (0) | 2021.03.24 |
댓글