为什么加了&主函数变量值却不是想要的

P1825 [USACO11OPEN] Corn Maze S

```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


|