#include<bits/stdc++.h>
using namespace std;
const int maxn=305;
int a[maxn][maxn],cx,cy,vis[maxn][maxn],m,n,fx,fy,sx,sy;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
void check(int x,int y,char c){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[i][j]==c&&i!=x&&j!=y){
cx=i;
cy=j;
break;
}
}
struct node{
int x,y,time;
};
int main(){
queue<node> q;
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
char c;
cin>>c;
if(c=='.') a[i][j]=1;
else if(c=='@'){
a[i][j]=1;
sx=i;
sy=j;
}
else if(c=='='){
a[i][j]=1;
fx=i;
fy=j;
}
else if(isalpha(c)){
a[i][j]=c;
}
}
q.push((node){sx,sy,0});
while(!q.empty()){
int nowx=q.front().x,nowy=q.front().y,nowt=q.front().time;
q.pop();
if(nowx==fx&&nowy==fy){
cout<<nowt;
return 0;
}
if(a[nowx][nowy]!=1&&a[nowx][nowy]!=0){
check(nowx,nowy,a[nowx][nowy]);
q.push((node){cx,cy,nowt});
continue;
}
vis[nowx][nowy]=1;
for(int i=0;i<4;i++){
int nextx=nowx+dx[i],nexty=nowy+dy[i];
if((a[nextx][nexty]!=0)&&(!vis[nextx][nexty])){
q.push((node){nextx,nexty,nowt+1});
}
}
}
}
写代码写到一半想测试一下,发现死活都是RE或者TLE,反正就是一直死循环的样子。后来找到一个地方
for(int i=0;i<4;i++){
int nextx=nowx+dx[i],nexty=nowy+dy[i];
if((a[nextx][nexty]!=0)&&(!vis[nextx][nexty])){
q.push((node){nextx,nexty,nowt+1});
}
最后这个循环如果把a[nextx][nexty]!=0给去掉的话能直接出来答案(虽然是错的)但是如果不去掉会一直出不来答案,为什么。。。我看了好久了都