ans[x][y] = d + 1;
q.push({ x, y });应该在循环内
by Creative_sad_yosgic @ 2023-01-17 13:31:18
@[Hayaizo](/user/792359) $int x = ux + dx[i], y = uy + dy[i];$ 应该是这样吧
by Tobiichi_Origami @ 2023-01-17 13:32:12
@[Hayaizo](/user/792359)
```cpp
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
typedef pair<int, int>PI;
typedef pair<int,PI>PII;
const int N = 310;
int ans[N][N];
int n, m, x, y;
const int dx[8] = {-1,-2,-2,-1,1,2,2,1};
const int dy[8] = { 2,1,-1,-2,2,1,-1,-2 };
queue<PII>q;
void Bfs() {
while (!q.empty()) {
PII u = q.front();
int ux = u.first, uy = u.second.first, ut=u.second.second;
q.pop();
for (int i = 0; i < 8; i++) {
int x = ux + dx[i], y = uy + dy[i];
if (x < 1 || x > n || y < 1 || y > m || ut+1>=ans[x][y]) {
continue;//越界或者已经走过了该位置
}
ans[x][y] = ut + 1;
q.push({ x, {y, ut+1} });
//cout<<ut+1<<" "<<x<<" "<<y<<endl;
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if(ans[i][j]==0x3f3f3f3f){
ans[i][j]=-1;
}
printf("%-5d", ans[i][j]);
}
puts("");
}
}
int main(void) {
scanf("%d %d %d %d", &n, &m, &x, &y);
memset(ans, 0x3f, sizeof(ans)); //初始化为-1,表示没有访问
ans[x][y] = 0; //初始位置距离为0
q.push({x,{y,0}});
Bfs();
return 0;
}
```
by Eirin_Yagokoro @ 2023-01-17 13:35:10
@[Tobiichi_Origami](/user/681351) 谢谢佬
by Hayaizo @ 2023-01-17 13:36:16
@[__dest__ruct__or__](/user/592238) 谢谢大佬
by Hayaizo @ 2023-01-17 13:36:50