代码如下
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[301][301],vis[301][301],special[301][301],sx,sy,fx,fy;
int dx[5]={0,0,0,1,-1},dy[5]={0,1,-1,0,0};
char x;
struct node{
int x,y,ans;
};
queue<node>q;
void pd(int bx,int by){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
{
if(a[i][j]==a[bx][by]&&!(i==bx&&j==by)){
bx=i;
by=j;
return ;
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
{
cin>>x;
if(x=='#') a[i][j]=0;
if(x=='.') a[i][j]=1;
if('A'<=x&&x<='Z') a[i][j]=x;
if(x=='@'){
sx=i;
sy=j;
a[sx][sy]=1;
}
if(x=='='){
fx=i;
fy=j;
a[fx][fy]=1;
}
}
}
vis[sx][sy]=1;
q.push(node{sx,sy,0});
while(!q.empty()){
int tx=q.front().x,ty=q.front().y,d=q.front().ans;
q.pop();
pd(tx,ty);
vis[tx][ty]=1;
if(tx==fx&&ty==fy){
printf("%d",d);
system("pause");
return 0;
}
for(int i=1;i<=4;i++){
int ax=tx+dx[i],ay=ty+dy[i];
if(ax>0&&ax<=n&&ay>0&&ay<=m&&vis[ax][ay]==0&&a[ax][ay]!=0){
q.push(node{ax,ay,d+1});
vis[ax][ay]=1;
}
}
}
return 0;
}
如果能帮助我 我一定关注感谢!