如果一个点都不能走(如:3 3 2 2、2 2 1 2)答案就是对的,否则就死循环
#include<bits/stdc++.h>
using namespace std;
int Map[400][400],vis[400][400],ans[400][400];
const int dx[]={-2,-2,-1,-1,1,1,2,2},dy[]={-1,1,-2,2,-2,2,-1,1};
struct pos
{
int x,y,step;
};
queue<pos> q;
int main()
{
pos start;
int n,m,sx,sy;
cin>>n>>m>>sx>>sy;
start.x=sx;
start.y=sy;
start.step=0;
q.push(start);
vis[sx][sy]=1;
while(!q.empty())
{
pos now=q.front();
q.pop();
ans[now.x][now.y]=now.step;
for(int i=0;i<8;i++)
{
pos New;
New.x=now.x+dx[i];
New.y=now.y+dy[i];
New.step=now.step+1;
if(New.x<=0||New.x>n||New.y<=0||New.y>m||vis[New.x][New.y])continue;
q.push(New);
vis[sx][sy]=1;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(ans[i][j]==0&&(i!=sx||j!=sy))ans[i][j]=-1;
printf("%-5d",ans[i][j]);
}
cout<<'\n';
}
return 0;
}