谁来帮帮我啊!!!!!!!!!!
  • 板块P1443 马的遍历
  • 楼主Enmin
  • 当前回复16
  • 已保存回复16
  • 发布时间2024/8/8 16:27
  • 上次更新2024/8/8 17:27:35
查看原帖
谁来帮帮我啊!!!!!!!!!!
772899
Enmin楼主2024/8/8 16:27
#include<bits/stdc++.h>

using namespace std;
using ll = long long;
using db = double;
using str = string;
const int N = 1e7;
const int M = 1e4;
//升:priority_queue <int,vector<int>,greater<int>> qe;
//降:priority_queque <int,vector<int>,less<int>> qe;

int g[9] = {0,-2,-1,1,2,2,1,-1,-2};
int h[9] = {0,1,2,2,1,-1,-2,-2,-1};
int n,m,l,r,sum=1,tail=1,x[N],y[N],z[N];
int bfs(int xy,int yx) {
    bool b[M][M];
    x[1]=l;
    y[1]=r;
    z[1]=0;
    b[l][r]=1;
    if(l==xy&&r==yx) {
        return 0;
    }
    while(sum<=tail) {
        for(int k=1;k<=8;k++) {
            int t1 = x[sum] + g[k];
            int t2 = y[sum] + h[k];
            if(t1>0&&t1<=n&&t2>0&&t2<=m&&b[t1][t2]==0) {
                b[t1][t2]=1;
                tail++;
                x[tail]=t1;
                y[tail]=t2;
                z[tail]=z[sum]+1;
                if(t1==xy&&t2==yx) {
                    return z[tail];
                }
            }
        }
        sum++;
    }
    return -1;
}
int main() {
    scanf("%d%d%d%d",&n,&m,&l,&r);
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=m;j++) {
            int ans=0;
            ans=bfs(i,j);
            printf("%d",ans);
            sum=1,tail=1;
            if(j!=m) {
                printf(" ");
            }else {
                printf("\n");
            }
        }
    }
    return 0;
}

我用的是sublime Text的编程程序。 我电脑输出样例时输出了这个玩意儿:

bash: 第 2 行: 13681 段错误
2024/8/8 16:27
加载中...