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");
    }
}

 

posted @ 2020-05-20 10:26  mohari  阅读(98)  评论(0编辑  收藏  举报