bfs50分求助
查看原帖
bfs50分求助
539495
what_else楼主2022/4/29 13:21
using namespace std;
int n,m,x,y;
int ans[500][500];
int book[500][500];
struct queue{
    int x,y,death;
}q[250001];
int move[8][2]={{1,2},{2,1},{-1,2},{-2,1},{2,-1},{-1,-2},{-2,-1},{1,-2}};

void bfs(){
    int head=0,tail=0;
    q[1].x=x;q[1].y=y;
    q[1].death=0;
    tail++;
    book[y][x]=1;
    while(head<tail){
        head++;
        if( ans[q[head].x][q[head].y] == -1)
            ans[q[head].x][q[head].y]=q[head].death;
        
        for(int i=0;i<=7;i++){
            int tx=(move[i][0]+q[head].x),ty=(move[i][1]+q[head].y);
            if(tx>0 && tx<=n && ty>0 && ty<=m){
                if(book[tx][ty]==0){
                    tail++;
                    book[tx][ty]=1;
                    q[tail].x=tx;
                    q[tail].y=ty;
                    q[tail].death=q[head].death+1;
                }
            }
        }
        
    }
    return;
}
int main(){
    cin>>n>>m>>x>>y;
    
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            ans[i][j]=-1;
    bfs();    
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            printf("%-5d",ans[i][j]);
        }
        printf("\n");}
}
2022/4/29 13:21
加载中...