另外,memset(a,-1,sizeof a)有什么用?
by zyh0516_lucky @ 2023-08-15 22:24:08
@[2022zhangyuanhao](/user/746930) 他说无解输出 -1 然后你初始化完跑一遍 bfs 没跑到的就是初始化的 -1
by CyberRiot @ 2023-08-15 22:28:07
@[IloveGanyu](/user/855900) 呸,不是无解,跑不到的是 -1,然后你 while 里面两个 for 循环我看的很迷,我一般都是记录队首点的坐标,然后再一个个判断拓展出去的点
by CyberRiot @ 2023-08-15 22:35:08
@[IloveGanyu](/user/855900) 感谢建议。可是队首点的坐标不就是now.x和now.y吗?
by zyh0516_lucky @ 2023-08-15 23:58:34
@[2022zhangyuanhao](/user/746930) 这是我的代码
```cpp
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y;
};
int ans[410][410];
queue <node> q;
const int w[8][2]{{2,1},{2,-1},{-2,1},{-2,-1},{1,2},{-1,2},{1,-2},{-1,-2}};//用常量数组记录偏移量
int main(){
int n,m;
scanf("%d%d",&n,&m);
memset(ans,-1,sizeof(ans));
int sx,sy;
scanf("%d%d",&sx,&sy);
ans[sx][sy]=0;
q.push({sx,sy});
while(!q.empty()){
for(int k=0;k<=7;k++){
int tx=q.front().x+w[k][0],ty=q.front().y+w[k][1];//枚举拓展出去的点的坐标
int d=ans[q.front().x][q.front().y];
if(ans[tx][ty]!=-1||tx<1||tx>n||ty<1||ty>m) continue;
else{
ans[q.front().x+w[k][0]][q.front().y+w[k][1]]=d+1;
q.push({q.front().x+w[k][0],q.front().y+w[k][1]});
}
}
q.pop();
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) printf("%d ",ans[i][j]);
printf("\n");
}
return 0;
}
```
by CyberRiot @ 2023-08-16 08:09:38
@[IloveGanyu](/user/855900) 思路通明&&代码清新,透彻了,感谢。
by zyh0516_lucky @ 2023-08-18 13:19:25
[已AC](https://www.luogu.com.cn/record/121637795)
by zyh0516_lucky @ 2023-08-18 19:16:42