#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
#define forr(i,a,b) for(int i = (a);i <= (b);i ++)
struct node{
int x;
int y;
int t;
};
int n,m;
char mp[305][305];
bool vis[305][305];
int dxy[4][2] = {{-1,0},{0,-1},{1,0},{0,1}};
queue<node> q;
int sx,sy,ex,ey;
void cc(int &x,int &y){
forr(i,1,n){
forr(j,1,m){
if(mp[x][y] == mp[i][j] && (x != i || y != j)){
x = i;
y = j;
return;
}
}
}
return;
}
int main(){
cin >> n >> m;
forr(i,1,n){
scanf("%s",mp[i]);
}
forr(i,1,n){
forr(j,1,m){
if(mp[i][j] == '@'){
sx = i;
sy = j;
}
}
}
q.push((node){sx,sy,0});
while(!q.empty()){
node v = q.front();
q.pop();
int x = v.x;
int y = v.y;
int t = v.t;
if(mp[x][y] == '='){
cout << t << "\n";
return 0;
}
if(mp[x][y] <= 'Z' && mp[x][y] >= 'A') cc(x,y);
for(int i = 0;i < 4;i ++){
int dx = x + dxy[i][0];
int dy = y + dxy[i][1];
if(dx >= 1 && dy >= 1 && dx <= n && dy <= m && mp[dx][dy] != '#' && !vis[dx][dy]){
q.push((node){dx,dy,t + 1});
vis[dx][dy] = 1;
}
}
}
return 0;
}
麻烦不要一上来就贴代码好吗,蒟蒻只想知道自己的程序哪里错了qwq