已经调魔怔了,求改啊改
#include<bits/stdc++.h>
//#define int long long;
using namespace std;
pair<int,int>s;
const int N=500;
char a[N][N];
int n,m,cnt=0;
int st[N][N];
int dx[]={0,0,-1,1};
int dy[]={1,-1,0,0};
typedef pair<int,int> PII;
queue<PII>q;
int dist[N][N];
pair<int ,int>find(int &x,int &y,char t)
{
// cout<<x<<" "<<y<<endl;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(a[i][j]==t&&(i!=x||j!=y))
{
// cout<<i<<" "<<j<<endl;
return {i,j};
}
}
}
int bfs()
{
while(q.size())
{
auto now=q.front();
q.pop();
int x=now.first;
int y=now.second;
//cout<<x<<" "<<y<<"wewwqeqqwq"<<dist[x][y]<<endl;
if(a[x][y]>='A'&&a[x][y]<='Z')
{
//cout<<x<<" "<<y<<"t1"<<endl;
auto [nx, ny] = find(x, y, a[x][y]);
if (nx != -1 && ny != -1) {
dist[nx][ny]=dist[x][y];
x = nx;
y = ny;
}
//cout<<x<<" "<<y<<"t2"<<endl;
}
// cout<<x<<" "<<y<<endl;
if(a[x][y]=='=')return dist[x][y];
for(int i=0;i<4;i++)
{
int nx=x+dx[i];
int ny=y+dy[i];
if(nx<0&&ny<0&&nx>n&&ny>m&&a[nx][ny]=='#')
continue;
if(dist[nx][ny]>0)
dist[nx][ny]=min(dist[nx][ny],dist[x][y]+1);
else dist[nx][ny]=dist[x][y]+1;
// cout<<a[x][y]<<endl;
q.push({nx,ny});
}
}
}
signed main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
cin>>a[i][j];
}
// memset(st,0,sizeof(st));
memset(dist,-1,sizeof(dist));
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(a[i][j]=='@')
{
q.push({i,j});
//cout<<i<<' '<<j<<"wsws"<<endl;
dist[i][j]=0;
}
}
cout<<bfs()<<endl;
}