WA+TLE 估计是queue爆了,求解惑
和很多AC代码相似
#include<bits/stdc++.h>
using namespace std;
const int N = 305;
struct node{
int x,y,step;
};
int n,m,_sx,_sy;
char mp[N][N];
bool visit[N][N];
int dx[]={-1,0,0,1};
int dy[]={0,-1,1,0};
queue<node>q;
void _goto(int &_x,int &_y,char k){
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
if((i!=_x||j!=_y)&&mp[_x][_y]==mp[i][j]){
_x=i,_y=j;
return;
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
scanf(" %c",&mp[i][j]);
if(mp[i][j]=='@')
_sx=i,_sy=j;
}
q.push((node){_sx,_sy,0});
while(q.size()){
node t=q.front();
q.pop();
if(mp[t.x][t.y]=='='){
cout<<t.step<<endl;
return 0;
}
if(mp[t.x][t.y]>='A'&&mp[t.x][t.y]<='Z'){
_goto(t.x,t.y,mp[t.x][t.y]);
}
for(int i=0;i<4;i++)
int nx=t.x+dx[i],ny=t.y+dy[i];
if(nx<1||nx>n||ny<1||ny>m||mp[nx][ny]=='#'||visit[nx][ny])continue;
q.push((node){nx,ny,t.step+1});visit[t.x][t.y]=1;
}
}
return 0;
}