附上我的6分代码刚打的
```cpp
#include <bits/stdc++.h>
using namespace std;
struct la{
int y,x,ans;
}s[90000];
int N,M;
int starty,startx,finishy,finishx;
struct maze{
string a;
}a[910];
int dy[]{-1,1,0,0};
int dx[]{0,0,-1,1};
void find(int tail,int x,int y,char na){
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
if(a[i].a[j]==na&&i!=x&&j!=y){
s[tail].x=i;
s[tail].x=j;
}
}
}
}
void bfs(){
int tail=1,head=0;
while(head<tail){
int yy=s[head].y,xx=s[head].x,sum=s[head].ans;
head++;
for(int i=0;i<4;i++){
if(xx+dx[i]>=0&&yy+dy[i]>=0&&xx+dx[i]<N&&yy+dy[i]<M&&a[xx+dx[i]].a[yy+dy[i]]!='#'){
if(a[xx+dx[i]].a[yy+dy[i]]=='.'){
s[tail].ans=sum++;
s[tail].y=yy+dy[i];
s[tail++].x=yy+dx[i];
a[xx+dx[i]].a[yy+dy[i]]='#';
} else{
if(a[xx+dx[i]].a[yy+dy[i]]>='A'&&a[xx+dx[i]].a[yy+dy[i]]<='Z'){
find(tail,xx+dx[i],yy+dy[i],a[xx+dx[i]].a[yy+dy[i]]);
s[tail++].ans=sum+1;
}else{
if(a[xx+dx[i]].a[yy+dy[i]]=='='){
cout<<sum+1;
return ;
}
}
}
}
}
}
}
int main(){
cin>>N>>M;
for(int i=0;i<N;i++){
cin>>a[i].a;
if(a[i].a.find("@")<a[i].a.length()){
starty=a[i].a.find("@");
startx=i;//起点
}
}
s[0].y=starty;
s[0].x=startx;
s[0].ans=0;
bfs();
}
```
by Light_Star @ 2023-03-31 22:31:17