悬关,求调简单bfs

P1443 马的遍历

另外,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


|