1 条题解

  • 1
    @ 2024-5-31 19:26:10

    思路

    使用bfs解决,需要注意判断当前点是否被遍历过,否则会死循环。

    AC Code

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    const ll N=405;
    ll n,m,x,y,ans[N][N],d[8][2]={-1,2,-1,-2,1,2,1,-2,2,1,2,-1,-2,-1,-2,1};
    struct node{
        ll x,y,cnt;
    };
    queue<node> q;
    void bfs(ll x,ll y){
        q.push({x,y,0});
        while(!q.empty()){
            node p=q.front();
            q.pop();
            if(p.x<1||p.y<1||p.x>n||p.y>m||ans[p.x][p.y]!=-1)
                continue;
            ans[p.x][p.y]=p.cnt;
            for(ll i=0;i<8;i++)
                q.push({p.x+d[i][0],p.y+d[i][1],p.cnt+1});
        }
    }
    int main(){
        memset(ans,-1,sizeof(ans));
        scanf("%lld%lld%lld%lld",&n,&m,&x,&y);
        bfs(x,y);
        for(ll i=1;i<=n;i++)
            for(ll j=1;j<=m;j++)
                printf("%lld%c",ans[i][j],j==m?'\n':' ');
        return 0;
    }
    
    • 1

    信息

    ID
    761
    时间
    1000ms
    内存
    128MiB
    难度
    4
    标签
    递交数
    139
    已通过
    60
    上传者