求助

P2385 [USACO07FEB] Bronze Lilypad Pond B

xiaofeng_and_xiaoyu @ 2023-06-29 19:28:35

#include<bits/stdc++.h>
using namespace std;
int r[101][101];
int t[101][101];
queue<int> x;
queue<int> y;
int dx[8];
int dy[8];
int main(){
    int a,b,c,d,nx=0,ny=0,wx,wy;
    cin>>a>>b>>c>>d;
    dx[0]=c;
    dx[1]=c;
    dx[2]=-1*c;
    dx[3]=-1*c;
    dx[4]=d;
    dx[5]=d;
    dx[6]=-1*d;
    dx[7]=-1*d;
    dy[5]=c;
    dy[7]=c;
    dy[4]=-1*c;
    dy[6]=-1*c;
    dy[1]=d;
    dy[0]=d;
    dy[3]=-1*d;
    dy[2]=-1*d;
    for(int i=1;i<=a;i++){
        for(int j=1;j<=a;j++){
            cin>>r[i][j];
            if(r[i][j]==3){
                nx=i;
                ny=j;
                x.push(i);
                y.push(j);  
            }
            if(r[i][j]==4){
                wx=i;
                wy=j;
            }
        }
    }
    while(1){
        t[nx][ny]+=1;
        r[nx][ny]=0; 
        for(int i=0;i<8;i++){
            if(dx[i]+nx<=a&&dx[i]+nx>0&&dy[i]+ny>=b&&dy[i]+ny<=0&&r[nx+dx[i]][ny+dy[i]]==1){
                x.push(dx[i]+nx);
                y.push(dy[i]+ny);
                t[dx[i]+nx][dy[i]+ny]=t[nx][ny];
            }
        }
        x.pop();
        y.pop();
        if(nx==wx&&ny==wy){
            break;
        }
    }
    cout<<t[wx][wy];
    return 0;
}

手打BFS,没什么经验


|