今年以来,发现以前很多“不可做”的题现在都变得简单起来了。(是不是因为我太蒻了)
尤其是像“马的遍历”这样的题。(别欺负小蒟蒻不会用队列QAQ)
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int a[401][401];//存储答案 int n,m,sx,sy; int movex[8]={2,2,1,-1,-2,-2,-1,1},movey[8]={-1,1,2,2,1,-1,-2,-2};//马走“日” int qx[160001],qy[160001],k[160001]; int xyds=1; void bfs(int step) { if(k[step-1]==xyds) return; k[step]=xyds; int djy=xyds; for(int i=k[step-1];i<djy;i++){ for(int j=0;j<=7;j++){//尝试8个方向 int x=qx[i]+movex[j],y=qy[i]+movey[j]; if(x>=1&&x<=n&&y>=1&&y<=m&&a[x][y]==-1){ a[x][y]=step;//存储步数 qx[xyds]=x; qy[xyds]=y;//存储位置 xyds++; } } } bfs(step+1); } int main() { memset(a,-1,sizeof(a)); scanf("%d%d%d%d",&n,&m,&sx,&sy); a[sx][sy]=0; qx[0]=sx; qy[0]=sy; bfs(1); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++) printf("%-5d",a[i][j]);//左对齐输出 printf(" "); } return 0; }