P1443 马的遍历(bfs)
水题。输出的时候左对齐,宽度5,要用-5%d。
#include<bits/stdc++.h> using namespace std; int step[405][405]; int vis[405][405]; int n,m; struct node{ int x,y; node(int a,int b):x(a),y(b){}; node(){}; }; int dx[8]={-2,-2,-1,-1,1,1,2,2}; int dy[8]={-1,1,-2,2,-2,2,-1,1}; queue<node>q; int check(int x,int y){ if(x<1||y<1||x>n||y>m)return 0; return 1; } void bfs(){ while(!q.empty()){ node k=q.front();q.pop(); for(int i=0;i<8;i++){ int tx=k.x+dx[i]; int ty=k.y+dy[i]; if(check(tx,ty)&&!vis[tx][ty]){ vis[tx][ty]=1; step[tx][ty]=step[k.x][k.y]+1; q.push(node(tx,ty)); } } } } int main() { node point; cin>>n>>m>>point.x>>point.y; q.push(point); fill(step[0],step[0]+405*405,-1); fill(vis[0],vis[0]+405,0); step[point.x][point.y]=0; vis[point.x][point.y]=1; bfs(); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ printf("%-5d",step[i][j]); } printf("\n"); } }