@[zjb20080913](/user/1019829) 你没有判断重复路线,这是我的代码,你可以对照一下
```cpp
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
#define FOR(i,j,n,k) for(int i=(j);i<=(n);i+=k)
#define ROR(i,j,n,k) for(int i=(j);i>=(n);i-=k)
const int dx[8]={-1,-2,-2,-1,1,2,2,1};
const int dy[8]={2,1,-1,-2,2,1,-1,-2};
int n,m;
int map[410][410];
struct csp{
int x,y,a;
};
bool vis[410][410];
bool check(int x,int y){
return (x>=1&&x<=n&&y>=1&&y<=m);
}
int bfs(int x,int y,int a){
queue<csp> q;
q.push((csp){x,y,a});
while(!q.empty()){
x=q.front().x;
y=q.front().y;
a=q.front().a;
q.pop();
if(vis[x][y]) continue;
vis[x][y]=1;
map[x][y]=a;
FOR(i,0,7,1){
int tx=x+dx[i];
int ty=y+dy[i];
if(check(tx,ty)) q.push((csp){tx,ty,a+1});
}
}
return -1;
}
int main(){
int x,y;
scanf("%d%d%d%d",&n,&m,&x,&y);
memset(map,-1,sizeof(map));
int d=bfs(x,y,0);
FOR(i,1,n,1){
FOR(j,1,m,1){
if(i==x&&j==y){
printf("%-5d",0);
continue;
}
printf("%-5d",map[i][j]);
}
printf("\n");
}
return 0;
}
```
by danlao @ 2024-01-30 12:58:38
@[zjb20080913](/user/1019829) bfs的函数类型应该是void吧
by CTGU_23_sxy @ 2024-01-30 13:37:20
@[yaodiguoan](/user/1023793) 判断重复路线的我有,用的是bj数组,它用来记录步数,要是步数为0以为没走过,否则走过
by zjb20080913 @ 2024-01-31 08:57:31
@[CTGU_23_sxy](/user/1163702) 对,是这个问题,可能当时没注意,谢谢
by zjb20080913 @ 2024-01-31 08:59:06
@[yaodiguoan](/user/1023793) 感谢
by zjb20080913 @ 2024-01-31 08:59:35
@[zjb20080913](/user/1019829) 你的起点的值是-1,不是0
by danlao @ 2024-01-31 09:19:12
@[yaodiguoan](/user/1023793) 我后面有输出处理
by zjb20080913 @ 2024-01-31 11:17:09
@[zjb20080913](/user/1019829) 不是这个意思,是起点不是0,有可能被重复走
by danlao @ 2024-01-31 12:45:02
@[yaodiguoan](/user/1023793) 我有判断是0才走
by zjb20080913 @ 2024-01-31 16:14:52
@[zjb20080913](/user/1019829) 是的,是我搞错了,这个评论无法删除的。
by danlao @ 2024-01-31 17:54:32