【題解】洛谷P1443馬的遍歷 bfs
阿新 • • 發佈:2019-01-26
#include<cstdio> #include<queue> #include<cstring> using namespace std; int n,m,sx,sy,vis[401][401]; int dx[8]={-2,-1,1,2,2,1,-1,-2},dy[8]={1,2,2,1,-1,-2,-2,-1}; struct node{ int x,y,s; node(){} node(int _x,int _y,int _s):x(_x),y(_y),s(_s){} }; void bfs(int sx,int sy) { queue<node>q;q.push(node(sx,sy,0));vis[sx][sy]=0; while(q.size()) { node tmp=q.front();q.pop(); for(int i=0;i<8;i++) { int nx=dx[i]+tmp.x,ny=dy[i]+tmp.y; if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&vis[nx][ny]==-1) { vis[nx][ny]=tmp.s+1;q.push(node(nx,ny,tmp.s+1)); } } } } int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); scanf("%d%d%d%d",&n,&m,&sx,&sy); memset(vis,-1,sizeof(vis)); bfs(sx,sy); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) printf("%-5d",vis[i][j]); if(i!=n)printf("\n"); } return 0; }
總結
這個格式寫法挺新奇