下载了测试点数据 在自己的机器上是对的 但是提交了就是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;
}