已过,谢谢
```cpp
#include <iostream>
using namespace std;
int n,m,dx[4]={-1,0,1,0},dy[4]={0,1,0,-1},d[100010][3],x,y,zx,zy,cs[26][2][2],t,w=1;
short map[310][310];
char ch;
int main()
{
int i,j;
cin>>n>>m;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
cin>>ch;
switch(ch)
{
case '#':break;
case '.':{map[i][j]=1;
break;
}
case '@':{x=i;y=j;
break;
}
case '=':{zx=i;zy=j;map[i][j]=1;
break;
}
default:{map[i][j]=ch-'A'+2;
if(!cs[ch-'A'][1][0]&&!cs[ch-'A'][1][1]){cs[ch-'A'][1][0]=i;cs[ch-'A'][1][1]=j;}
else{cs[ch-'A'][0][0]=i;cs[ch-'A'][0][1]=j;}
}
}
}
d[1][0]=x;d[1][1]=y;
while(t!=w)
{
t++;
for (i=0;i<4;i++)
{
x=d[t][0]+dx[i];y=d[t][1]+dy[i];
if (x>0&&x<=n&&y>0&&y<=m&&map[x][y])
{
w++;
if (map[x][y]>1)
if (cs[map[x][y]-2][1][0]==x&&cs[map[x][y]-2][1][1]==y){d[w][0]=cs[map[x][y]-2][0][0];d[w][1]=cs[map[x][y]-2][0][1];}
else{d[w][0]=cs[map[x][y]-2][1][0];d[w][1]=cs[map[x][y]-2][1][1];}
else{d[w][0]=x;d[w][1]=y;}
d[w][2]=d[t][2]+1;
map[x][y]=0;//map[d[w][0]][d[w][1]]=0;
if (d[w][0]==zx&&d[w][1]==zy){cout<<d[w][2]<<endl;return 0;}
}
}
}
return 0;
}
```
by a___ @ 2017-04-21 12:19:49