90 pts 求调
  • 板块P1443 马的遍历
  • 楼主stork
  • 当前回复4
  • 已保存回复4
  • 发布时间2025/7/31 17:02
  • 上次更新2025/7/31 21:40:02
查看原帖
90 pts 求调
1371361
stork楼主2025/7/31 17:02
#include <bits/stdc++.h>
using namespace std;
struct node
{
    int x,y,t;
};
int n,m,sx,sy,d[8][2]={{-1,2},{-2,1},{-2,-1},{-1,-2},{1,2},{2,1},{2,-1},{1,-2}};
bool vis[401][401];
int bfs(int fx,int fy)
{
    int xx,yy,tt;
    queue <node> q;
    q.push({sx,sy,0});
    while (!q.empty())
    {
        xx=q.front().x;
        yy=q.front().y;
        tt=q.front().t;
        q.pop();
        if (xx==fx&&yy==fy) return tt;
        for (int i=0;i<8;i++)
        {
            if (xx+d[i][0]<=0||yy+d[i][1]<=0||xx+d[i][0]>n||yy+d[i][1]>m||vis[xx+d[i][0]][yy+d[i][1]])
                continue;
            q.push({xx+d[i][0],yy+d[i][1],tt+1});
            vis[xx+d[i][0]][yy+d[i][1]]=true;
		}
    }
    return -1;
}
int main()
{
    scanf("%d%d%d%d",&n,&m,&sx,&sy);
    for (int i=1;i<=n;i++)
        {
            for (int j=1;j<=m;j++)
                {
                    memset(vis,0,sizeof(vis));
                    vis[sx][sy]=true;
                    printf("%d ",bfs(i,j));
                }
            printf("\n");
        }
    return 0;
}
2025/7/31 17:02
加载中...