#4 RE 求调
查看原帖
#4 RE 求调
1108646
AllenAlien楼主2023/11/20 23:47

下载了测试点数据 在自己的机器上是对的 但是提交了就是RE 数组开大试过了 还是不行

#include<iostream>
#define MAXN 305
using namespace std;

char arr[MAXN][MAXN];
int sx,sy,fx,fy; // 起点、终点坐标
int tp[30][2][2]; // tp[字母][结点][坐标]
int turn[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
bool book[MAXN][MAXN];
struct node{
    int x=0;
    int y=0;
    int s=0;
}que[MAXN*MAXN];

int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            cin>>arr[i][j];
            if(arr[i][j]=='@') sx=i,sy=j;
            else if(arr[i][j]=='=') fx=i,fy=j;
            else if(arr[i][j]>='A'&&arr[i][j]<='Z'){ // 存储传送点
                int t=arr[i][j]-'A';
                if(tp[t][0][0]==0) tp[t][0][0]=i,tp[t][0][1]=j;
                else tp[t][1][0]=i,tp[t][1][1]=j;
            }
        }
    que[0].x=sx; que[0].y=sy; que[0].s=0;
    book[sx][sy]=1;
    int tot=0;
    for(int cur=0;cur<=tot;cur++){
        node f=que[cur];
        if(f.x==fx&&f.y==fy){ // 检测是否达到终点
            cout<<f.s<<endl;
            break;
        }
        for(int i=0;i<4;i++){ // bfs
            int cx=f.x+turn[i][0],cy=f.y+turn[i][1];
            if(arr[cx][cy]>='A'&&arr[cx][cy]<='Z'){ // 是否位于传送点
                int t=arr[cx][cy]-'A';
                if(tp[t][0][0]==cx&&tp[t][0][1]==cy) cx=tp[t][1][0],cy=tp[t][1][1];
                else cx=tp[t][0][0],cy=tp[t][0][1];
            }
            if(arr[cx][cy]!='#'&&!book[cx][cy]){
                book[cx][cy]=1;
                tot++;
                que[tot].x=cx;
                que[tot].y=cy;
                que[tot].s=f.s+1;
            }
        }
    }
    return 0;
}
2023/11/20 23:47
加载中...