@[leiwusi](/user/525038) 已经遍历过的点不应该再遍历,否则会在两个点之间反复遍历。
by 幻想繁星 @ 2024-03-03 12:40:04
@[leiwusi](/user/525038) 不知道,我用的pair就过了,你看看?
```
#include<bits/stdc++.h>
using namespace std;
int d1[8] = {2,1,2,1,-2,-1,-2,-1};
int d2[8] = {1,2,-1,-2,-1,2,1,-2};
int g[500][500];
typedef pair<int,int> node;
int main(){
int n,m,x,y;
cin>>n>>m>>x>>y;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
g[i][j]=-1;
g[x][y]=0;
node t;
t.first=x;t.second=y;
queue<node>q;
q.push(t);
while(!q.empty()){
t=q.front();
q.pop();
for(int i=0;i<8;i++){
int dx=t.first,dy=t.second;
if(dx+d1[i]<=n&&dx+d1[i]>=1&&dy+d2[i]<=m&&dy+d2[i]>=1&&g[dx+d1[i]][dy+d2[i]]==-1){
g[dx+d1[i]][dy+d2[i]]=g[dx][dy]+1;
q.push({dx+d1[i],dy+d2[i]});
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
cout<<g[i][j]<<" ";
cout<<endl;
}
return 0;
}
```
by LikeMiracle @ 2024-03-05 00:08:09