```c
#include <iostream>
#include <queue>
#include <map>
using namespace std;
struct node1 {
int x1;
int y1;
int x2;
int y2;
};
map<char, node1>ma;
int xx1,yy1;
int s = 0;int n, m;int u, v;
//总结qpush 还有自己写的ans max
char map1[305][305];
int tx[4] = {1, -1, 0, 0};
int ty[4] = {0, 0, 1, -1};
bool vis[305][305];
struct node {
int x;
int y;
int t;
} temp;
queue<node>q;
void check(int &xx, int &yy) {
if(ma[map1[xx][yy]].x1!=0&&ma[map1[xx][yy]].x2==0)
{
xx = ma[map1[xx][yy]].x1;
yy = ma[map1[xx][yy]].y1;
return ;
}//单个字母出现时 下面是成对时
else
{
if (ma[map1[xx][yy]].x1 != xx && ma[map1[xx][yy]].y1 != yy) {
xx = ma[map1[xx][yy]].x1;
yy = ma[map1[xx][yy]].y1;
} else {
xx = ma[map1[xx][yy]].x2;
yy = ma[map1[xx][yy]].y2;
}
}
}
void read(int n,int m)
{
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> map1[i][j];
if (map1[i][j] == '@') {
u = i;
v = j;
} else if (map1[i][j] >= 'A' && map1[i][j] <= 'Z') {
if (ma[map1[i][j]].x1 == 0 && ma[map1[i][j]].y1 == 0) {
ma[map1[i][j]].x1 = i;
ma[map1[i][j]].y1 = j;
} else {
ma[map1[i][j]].x2 = i;
ma[map1[i][j]].y2 = j;
}
}
}
}
}
int main() {
cin >> n >> m;
read(n,m);
// cout<<ma['W'].x1<<" "<<ma['W'].y1<<endl;
// cout<<ma['W'].x2<<" "<<ma['W'].y2;
vis[u][v] = 1;
q.push((node) { u, v, 0 });
while (!q.empty()) {
temp = q.front();
q.pop() ;
int xx = temp.x;
int yy = temp.y;
if (map1[xx][yy] >= 'A' && map1[xx][yy] <= 'Z')
{ cout<<"转之前"<<xx<<" "<<yy<<endl;
//cout<<" sss";
check(xx,yy);
cout<<"转回来"<<xx<<" "<<yy<<endl;
}
if (map1[xx][yy] == '=') {
//cout << s;
return 0;
}
for (int i = 0; i < 4; i++) {
xx1=xx+tx[i];
yy1=yy+ty[i];
if (xx1 <= 0 || yy1 <= 0 || xx1 >n || yy1 >m)
continue;
if(vis[xx1][yy1])
continue;
if (map1[xx1][yy1] == '#')
continue;
if (map1[xx1][yy1] == '.') {
// cout<<xx1<<" "<<yy1<<endl;
vis[xx1][yy1] = 1;s = s + 1;
q.push((node) { xx1, yy1, s});
}
if(map1[xx1][yy1]>='A'&&map1[xx1][yy1]<='Z')
{
q.push((node) { xx1, yy1, s});
}
}
}
return 0;
}
```
by 呆呆的她啊 @ 2023-11-02 12:35:59
@[only_a_speaker](/user/1154375) 可以烦请您花费宝贵的几分钟看看吗 臣不胜谢恩感激
by 呆呆的她啊 @ 2023-11-02 12:37:01
@[呆呆的她啊](/user/226167) 按道理说
4 4
2 3
by 呆呆的她啊 @ 2023-11-02 12:37:54
您好,请不要在 `xx` 变量已经做出改变之后再去使用 `xx` 。
by only_a_speaker @ 2023-11-02 12:44:42
@[呆呆的她啊](/user/226167) 你在 $check$ 里每次都是先改变了 $xx$ 的值,再用 $xx$ 更新 $yy$,导致实际上现在的 $xx$ 已经是传送后的 $xx$,导致 $yy$ 出错
修改方法是在 $check$ 里一上来就定义 `int tmpxx=xx;`,后面更新 $yy$ 的时候把 `ma[map1[xx][yy]]` 改成 `ma[map1[tmpxx][yy]]`
by Bingxiu @ 2023-11-02 13:07:17
@[Bingxiu](/user/676498) 懂了 谢谢您!!!!!!!!
by 呆呆的她啊 @ 2023-11-02 13:12:17
@[only_a_speaker](/user/1154375) 明白了谢谢您[only_a_speaker](/user/1154375)
by 呆呆的她啊 @ 2023-11-02 13:13:17