RT
#include <bits/stdc++.h>
using namespace std;
int n,m,sx,sy,fx,fy,ans=100000,a[305][305];
char c[305][305];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
void dfs(int x,int y,int l){
for(int i=0;i<=3;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(nx<=0||ny<=0||nx>n||ny>m)continue;
else if(c[nx][ny]=='#')continue;
else if(c[nx][ny]=='.'&&a[nx][ny]==0){
a[nx][ny]=1;
dfs(nx,ny,l+1);
a[nx][ny]=0;
}
else if(c[nx][ny]>='A'&&c[nx][ny]<='Z'){
for(int k=1;k<=n;k++){
for(int j=1;j<=m;j++){
if(c[k][j]==c[nx][ny]&&(k!=nx||j!=ny)){
dfs(k,j,l+1);
}
}
}
}
else if(c[nx][ny]=='='){
ans=min(ans,l+1);
}
}
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]=='@'){
sx=i;
sy=j;
}
if(c[i][j]=='='){
fx=i;
fy=j;
}
}
}
a[sx][sy]=1;
dfs(sx,sy,0);
cout<<ans;
}
这是代码 求改进或解释为什么bfs更好以及如何选取合适搜索方式