P1126机器人搬重物 WA+MLE+AC
查看原帖
P1126机器人搬重物 WA+MLE+AC
1422025
azhoudexiaotuirou楼主2024/8/12 21:37

红温了,有没有大佬帮忙修改一下

#include<iostream>
#include<queue>
using namespace std;
int arr[505][505],dir[5][3]={{0,0},{0,-1},{-1,0},{0,1},{1,0}};
bool vis[505][505];
struct node{
    int x,y,step,dire;
};
int main(){
    int num,n,m,sx,sy,fx,fy;cin>>m>>n;
    char s;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>arr[i][j];
        }
    }
    cin>>sx>>sy>>fx>>fy>>s;
    if(s=='S'){num=1;}
    if(s=='N'){num=3;}
    if(s=='W'){num=2;}
    if(s=='E'){num=4;}
    queue<node> q;
    q.push({sx,sy,0,num});
    vis[sx][sy]=1;
    while(!q.empty()){
        node t=q.front();
        q.pop();
        vis[t.x][t.y]=1;
        if(t.x==fx&&t.y==fy){cout<<t.step;return 0;}
        int nn=t.dire;
        int nx=t.x+dir[nn][0];
        int ny=t.y+dir[nn][1];
        if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&vis[nx][ny]==0&&arr[nx][ny]==0){
            q.push({nx,ny,t.step+1,t.dire});
            vis[nx][ny]=1;
            nx+=dir[nn][0];
            ny+=dir[nn][1];
            if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&vis[nx][ny]==0&&arr[nx][ny]==0){
                q.push({nx,ny,t.step+1,t.dire});
                vis[nx][ny]=1;
                nx+=dir[nn][0];
                ny+=dir[nn][1];
                if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&vis[nx][ny]==0&&arr[nx][ny]==0){
                    q.push({nx,ny,t.step+1,t.dire});
                    vis[nx][ny]=1;
                }
            }
        }
        if(t.dire==1){q.push({t.x,t.y,t.step+1,4});}
        if(t.dire==1){q.push({t.x,t.y,t.step+1,2});}
        if(t.dire==3){q.push({t.x,t.y,t.step+1,4});}
        if(t.dire==3){q.push({t.x,t.y,t.step+1,2});}
        if(t.dire==2){q.push({t.x,t.y,t.step+1,3});}
        if(t.dire==2){q.push({t.x,t.y,t.step+1,1});}
        if(t.dire==4){q.push({t.x,t.y,t.step+1,3});}
        if(t.dire==4){q.push({t.x,t.y,t.step+1,1});}
    }
    cout<<-1;
    return 0;
}
2024/8/12 21:37
加载中...