P1443 马的遍历 广搜枚举
#include<bits/stdc++.h>
using namespace std;
int n,m,x_1,y_1;
int X[10]={0,1,2,1,2,-1,-2,-1,-2};
int Y[10]={0,2,1,-2,-1,3,1,-2,-1};
int a[405][405];
int vis[405][405];
struct node
{
int x,y;
};
inline void BFS()
{
queue<node>q;
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)vis[i][j]=-1;
vis[x_1][y_1]=0;
q.push((node){x_1,y_1});
while(!q.empty())
{
node now=q.front();q.pop();
for(int i=1;i<=8;i++)
{
int xi=now.x +X[i];
int yi=now.y +Y[i];
if(xi<1 || yi<1 || xi>n || yi>m)continue;//越界的
if(vis[xi][yi]!=-1)continue;//不能走的
vis[xi][yi]=vis[now.x ][now.y ]+1;
q.push((node){xi,yi});
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m>>x_1>>y_1;
BFS();
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<vis[i][j]<<" ";
}
cout<<endl;
}
}