```c
#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
int n,m,sx,sy,ex,ey;
char ss[350][350];
int vis[350][350];
int d[4][2] = {{-1,0},{1,0},{0,-1},{0,1}};
struct node{
int x,y,step;
}q[350*350];
int bfs(int sx, int sy, int ex, int ey){
int head = 1, tail = 2;
q[head].x = sx;
q[head].y = sy;
q[head].step = 0;
vis[sx][sy] = true;
while(head < tail){
for(int k = 0; k < 4; k++){
int tx = q[head].x + d[k][0];
int ty = q[head].y + d[k][1];
if(ss[tx][ty] == '='){
return q[head].step+1;
}
if(tx < 0 || ty < 0 || tx >= 300 || ty >= 300) continue;
if(vis[tx][ty] || ss[tx][ty] == '#') continue;
if(ss[tx][ty] >= 'A' && ss[tx][ty] <= 'Z'){
int tempx = tx, tempy = ty;
vis[tx][ty] = true;
for(int i = 0; i < 300; i++){
for(int j = 0; j < 300; j++){
if(ss[i][j] == ss[tx][ty] && !vis[i][j]){
tx = i;
ty = j;
break;
}
}
}
vis[tempx][tempy] = false;
}
q[tail].x = tx;
q[tail].y = ty;
q[tail].step = q[head].step + 1;
if(ss[tx][ty] < 'A' || ss[tx][ty] > 'Z') vis[tx][ty] = true;
tail++;
}
head++;
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i = 0; i < n; i++) scanf("%s",ss[i]);
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(ss[i][j] == '='){
ex = i;
ey = j;
}
if(ss[i][j] == '@'){
sx = i;
sy = j;
}
}
}
cout << bfs(sx,sy,ex,ey);
return 0;
}
```
为什么我改成这个就对了QAQ
by letusgo @ 2024-02-11 10:50:13