如题,样例输出是3,我的输出是6
走传送门的地方有问题,求大佬帮忙看看
#include<bits/stdc++.h>
using namespace std;
int n,m,rx,ry,sx,sy,gx,gy,nx,ny;
char mp[305][305];
int times[305][305];
void gt(int a,int b)
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(i==a && j==b) continue;
else if(mp[i][j]==mp[a][b])
{
nx=a,ny=b;
return;
}
}
}
int main()
{
memset(times,-1,sizeof(times));
int dx[4]={1,0,-1,0};
int dy[4]={0,-1,0,1};
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>mp[i][j];
if(mp[i][j]=='@') sx=i,sy=j;
else if(mp[i][j]=='=') gx=i,gy=j;
}
}
typedef pair<int,int> Pair;
queue<Pair> que;
que.push(Pair(sx,sy));
times[sx][sy]=0;
while(!que.empty())
{
Pair p=que.front();
que.pop();
int x=p.first,y=p.second;
// printf("now x=%d,y=%d,times[%d][%d]=%d\n",x,y,x,y,times[x][y]);
if(x==gx && y==gy) break;
for(int i=0;i<4;i++)
{
nx=x+dx[i],ny=y+dy[i];
if(nx<0 || ny<0 || nx>=n || ny>=m || mp[nx][ny]=='#' || times[nx][ny]!=-1) continue;
else if(isalpha(mp[nx][ny]))
{
gt(nx,ny);
times[nx][ny]=times[x][y]+1;
// printf("now nx=%d,ny=%d,times[%d][%d]=%d\n",nx,ny,nx,ny,times[nx][ny]);
que.push(Pair(nx,ny));
}
else
{
times[nx][ny]=times[x][y]+1;
que.push(Pair(nx,ny));
}
}
}
cout<<times[gx][gy];
return 0;
}