#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m;
struct pp {int x;int y;int t;}p[10010][10010];
int v[10010][10010];
int vis[10010];
string s;
char a[3100][3100];
struct px {int x;int y;}aa[10010],bb[10010];
int x0,y9,x,y;
queue <pp> point;
int walk[4][2]={0,1,0,-1,1,0,-1,0};
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>s;
for(int j=1;j<=m;j++)
{
a[i][j]=s[j-1];
if(a[i][j]>='A'&&a[i][j]<='Z')
{
if(vis[a[i][j]])
bb[a[i][j]]=(px){i,j};
else
aa[a[i][j]]=(px){i,j};
vis[a[i][j]]=1;
}
if(a[i][j]=='@')
{
x0=i;y9=j;
}
}
}
point.push((pp){x0,y9,0});
while(point.size())
{
pp qwq=point.front();
if(a[qwq.x][qwq.y]=='=')
{
cout<<qwq.t<<endl;
return 0;
}
point.pop();
int xx,yy;
int xxx=qwq.x,yyy=qwq.y;
if(a[qwq.x][qwq.y]>='A'&&a[qwq.x][qwq.y]<='Z')
{
if(xxx==aa[a[qwq.x][qwq.y]].x&&yyy==aa[a[qwq.x][qwq.y]].y)
xxx=bb[a[qwq.x][qwq.y]].x,yyy=bb[a[qwq.x][qwq.y]].y;
if(xxx==bb[a[qwq.x][qwq.y]].x&&yyy==bb[a[qwq.x][qwq.y]].y)
xxx=aa[a[qwq.x][qwq.y]].x,yyy=aa[a[qwq.x][qwq.y]].y;
}
for(int i=0;i<=3;i++)
{
xx=xxx+walk[i][0];
yy=yyy+walk[i][1];
if(xx<1||xx>n||yy<1||yy>m||v[xx][yy]||a[xx][yy]=='#')
continue;
v[xx][yy]=1;
point.push((pp){xx,yy,qwq.t+1});
}
}
return 0;
}
交上去25分,其他测试点都WA。QAQ!