10分求助
查看原帖
10分求助
633466
LiaoYF1楼主2022/12/12 11:02
#include<iostream>
#include<queue>
using namespace std;
int n,m,a[55][55],dis[55][55][5],vis[55][55][5];
const int dx[6]={0,1,0,-1,0},
          dy[6]={0,0,-1,0,1},
          ffx[5]={0,3,4,1,2};
struct node{
    int x,y,fx;
};
node s,e;
inline bool ok(int x,int y){
    return x>=1&&x<=n&&y>=1&&y<=m;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
            if(a[i][j])a[i-1][j]=a[i][j-1]=a[i-1][j-1]=1;
        }
    }
    //cout<<"OK";
    char c;
    cin>>s.x>>s.y>>e.x>>e.y>>c;
    
    if(c=='E')s.fx=1;
    else if(c=='S')s.fx=2;
    else if(c=='W')s.fx=3;
    else s.fx=4;
    queue<node> q;
    q.push(s);
    vis[s.x][s.y][s.fx]=1;
    dis[s.x][s.y][s.fx]=0;
    while(!q.empty()){
        node nn=q.front();
        q.pop();
        //cout<<nn.x<<" "<<nn.y<<" "<<nn.fx<<"\n";
        if(nn.x==e.x&&nn.y==e.y){
            break;
        }
        for(int i=1;i<=4;i++){
            if(!vis[nn.x][nn.y][i]&&i!=nn.fx&&i!=ffx[nn.fx]){
                //cout<<1;
                vis[nn.x][nn.y][i]=1;
                dis[nn.x][nn.y][i]=dis[nn.x][nn.y][nn.fx]+1;
                q.push((node){nn.x,nn.y,i});
            }
        }
        for(int i=1;i<=3;i++){
            int nx=nn.x+dy[nn.fx]*i,ny=nn.y+dy[nn.fx]*i;
            
            if(ok(nx,ny)&&!vis[nx][ny][nn.fx]&&!a[nx][ny]){
                //cout<<nx<<" "<<ny<<"\n";
                vis[nx][ny][nn.fx]=1;
                dis[nx][ny][nn.fx]=dis[nn.x][nn.y][nn.fx]+1;
                q.push((node){nx,ny,nn.fx});
            }
        }
    }
    int ans=0x3f3f3f3f;
    for(int i=1;i<=4;i++){
        ans=min(ans,dis[e.x][e.y][i]);
    }
    cout<<ans;
    return 0;
}

总是输出0.

2022/12/12 11:02
加载中...