遇到要走多少次的问题,考虑广度优先搜索,广搜要用到队列:queue,队列的特点是 先进先出
#include<bits/stdc++.h>
using namespace std;
int xx[]={-2,-2,-1,-1,1,1,2,2};//左下右上
int yy[]={-1,1,-2,2,2,-2,1,-1};
int mp[405][405];
int n,m,x,y;
int main()
{
cin>>n>>m>>x>>y;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
mp[i][j]=-1;
}
}
queue<int >lx;//队列
queue<int >ly;
queue<int >s;
lx.push(x);ly.push(y);s.push(0);
mp[x][y]=0;
while(!s.empty())
{
for(int i=0;i<8;i++)
{
int dx=lx.front()+xx[i];
int dy=ly.front()+yy[i];
int ds=s.front()+1;
if(dx>=1&&dx<=n&&dy>=1&&dy<=m&&mp[dx][dy]==-1)
{
lx.push(dx);ly.push(dy);s.push(ds);
mp[dx][dy]=ds;
}
}
lx.pop();ly.pop();s.pop();
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<left<<setw(5)<<mp[i][j];
}
cout<<endl;
}
return 0;
}