题解 P1443 【马的遍历】

· · 题解

蒟蒻的第一篇题解 代码也不长

include<bits/stdc++.h>
using namespace std;
int a[1111][1111];
int vis[1111][1111];
int m,n;
int firstx,firsty;
int dx[]={0,1,1,-1,-1,-2,2,-2,2};
int dy[]={0,-2,2,-2,2,1,1,-1,-1};
struct v2{
int x,y,k=0;
bool Isleg(){
     return x>0&&y>0&&x<m+1&&y<n+1&&vis[x][y]==0;
}
};
void bfs(int x,int y){
v2 now,next;
now.x=x;
now.y=y;
queue<v2>que;
que.push(now);
while(!que.empty()){

       now=que.front();
       que.pop();
    for(int i=1;i<=8;i++){
        next.x=now.x+dx[i];
        next.y=now.y+dy[i];
        if(next.Isleg()){
            vis[next.x][next.y]=1;
            next.k=now.k+1;
            a[next.x][next.y]=next.k;//此时得到新的值
            que.push(next);
        }
    }

}
}
int main()
{
    char ch;
    memset(vis,0,sizeof(vis));
    memset(a,-1,sizeof(a));
    scanf("%d%d%d%d",&m,&n,&firstx,&firsty);
    bfs(firstx,firsty);
    a[firstx][firsty]=0;
     for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
           printf("%-5d",a[i][j]);//这里按题目要求

        }
        printf("\n");
    }
    return 0;
}