为什么我的代码会全RE

P1443 马的遍历

@[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


|