7562번 - 나이트의 이동
다른분들 코드랑 비교해도 딱히 다른점을 못찾겠는데
계속 틀리네요 ㅜㅜㅜ
부탁드립니다.
#include <stdio.h>//BFSint dw[8] = { -2, -2, -1, -1, 1, 1, 2, 2 };int dh[8] = { -1, 1, -2, 2, -2, 2, -1, 1 };
int level[310][310] = { 0 };int visit[310][310] = { 0 };
int width[100000] = { 0 };int height[100000] = { 0 };
int l, startx, starty, wantx, wanty;
int head = 1, tail = 0;
int main() {
int T;
scanf("%d", &T); while (T--) { for (int i = 0; i < 310; i++) { for (int j = 0; j < 310; j++) { visit[i][j] = 0; level[i][j] = 0; } } for (int i = 0; i < 100000; i++) { width[i] = 0; height[i] = 0; }
scanf("%d", &l); scanf("%d %d", &startx, &starty); scanf("%d %d", &wantx, &wanty);
head = 1; tail = 0;
height[++tail] = starty; width[tail] = startx;
level[starty][startx] = 0; visit[starty][startx] = 1;
while (head <= tail) {
int curw = width[head]; int curh = height[head++];
if (startx==wantx &&starty== wanty) { printf("%d\n",level[curh][curw]); break; } else{ for (int i = 0; i < 8; i++) { int aw = curw + dw[i]; int ah = curh + dh[i]; if (aw >= 0 && aw < l && ah >= 0 && ah < l &&visit[ah][aw] != 0) { width[++tail] = aw; height[tail] = ah;
level[ah][aw] = level[curh][curw] + 1; visit[ah][aw] = 1;
} } } } }
return 0;}
댓글을 작성하려면 로그인해야 합니다.
ae878 7년 전
다른분들 코드랑 비교해도 딱히 다른점을 못찾겠는데
계속 틀리네요 ㅜㅜㅜ
부탁드립니다.
#include <stdio.h>
//BFS
int dw[8] = { -2, -2, -1, -1, 1, 1, 2, 2 };
int dh[8] = { -1, 1, -2, 2, -2, 2, -1, 1 };
int level[310][310] = { 0 };
int visit[310][310] = { 0 };
int width[100000] = { 0 };
int height[100000] = { 0 };
int l, startx, starty, wantx, wanty;
int head = 1, tail = 0;
int main() {
int T;
scanf("%d", &T);
while (T--) {
for (int i = 0; i < 310; i++) {
for (int j = 0; j < 310; j++) {
visit[i][j] = 0;
level[i][j] = 0;
}
}
for (int i = 0; i < 100000; i++) {
width[i] = 0;
height[i] = 0;
}
scanf("%d", &l);
scanf("%d %d", &startx, &starty);
scanf("%d %d", &wantx, &wanty);
head = 1;
tail = 0;
height[++tail] = starty;
width[tail] = startx;
level[starty][startx] = 0;
visit[starty][startx] = 1;
while (head <= tail) {
int curw = width[head];
int curh = height[head++];
if (startx==wantx &&starty== wanty) {
printf("%d\n",level[curh][curw]);
break;
} else{
for (int i = 0; i < 8; i++) {
int aw = curw + dw[i];
int ah = curh + dh[i];
if (aw >= 0 && aw < l && ah >= 0 && ah < l &&visit[ah][aw] != 0) {
width[++tail] = aw;
height[tail] = ah;
level[ah][aw] = level[curh][curw] + 1;
visit[ah][aw] = 1;
}
}
}
}
}
return 0;
}