题解 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;
}