#include<bits/stdc++.h>
using namespace std;
int n,m,ans[305][305];
int dx[]={0,-1,0,1};
int dy[]={1,0,-1,0};
char c[305][305],door[305][305];
int sx,sy,tx,ty,cnt;
bool v[305][305];
queue<int> qx,qy;
void getdoor(int nx,int ny){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if((door[i][j]==door[nx][ny])&&(nx!=i||ny!=j)){
ans[i][j]=ans[qx.front()][qy.front()]+1;
qx.push(i),qy.push(j);
return;
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>c[i][j];
if(c[i][j]>='A'&&c[i][j]<='Z'){
door[i][j]=c[i][j];
}
if(c[i][j]=='@'){
sx=i,sy=j;
}
}
}
qx.push(sx);
qy.push(sy);
while(!qx.empty()){
for(int i=0;i<4;i++){
tx=qx.front()+dx[i];
ty=qy.front()+dy[i];
if(door[tx][ty]){
ans[tx][ty]=ans[qx.front()][qy.front()]+1;
getdoor(tx,ty);
}else if(tx>0&&tx<=n&&ty>0&&ty<=n&&v[tx][ty]==0&&c[tx][ty]!='#'){
v[tx][ty]=1;
ans[tx][ty]=ans[qx.front()][qy.front()]+1;
if(c[tx][ty]=='='){
cout<<ans[tx][ty];
return 0;
}
qx.push(tx),qy.push(ty);
}
}
qx.pop(),qy.pop();
}
return 0;
}
请给位大佬帮忙看一下哪里出了问题,谢谢!
(问题:WA/TLE)