有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 400 + 10;
const int dx[] = {1,1,-1,-1,2,2,-2,-2};
const int dy[] = {2,-2,2,-2,1,-1,1,-1};
int n,m;
int a[maxn][maxn];
struct node
{
int a;
int b;
int step;
node(int _a = 0,int _b = 0,int _step = 0):a(_a),b(_b),step(_step){}
};
node z;
void solve()
{
scanf("%d%d%d%d",&n,&m,&z.a,&z.b);
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
a[i][j] = -1;
}
}
queue<node> q;
a[z.a][z.b] = 0;
q.push(z);
while(!q.empty())
{
node tmp ;
for(int i = 0;i<8;i++)
{
tmp = q.front();
int x = tmp.a + dx[i];
int y = tmp.b + dy[i];
if(x>=1&&x<=n&&y>=1&&y<=m&&a[x][y]==-1)
{
tmp.a = x;
tmp.b = y;
tmp.step++;
q.push(tmp);
a[x][y] = tmp.step;
}
}
q.pop();
}
for(int i =1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
printf("%-5d",a[i][j]);
}
printf("\n");
}
}
int main()
{
solve();
return 0;
}
bfs
最新推荐文章于 2021-08-23 22:13:52 发布