样例过不了,蒟蒻求助
查看原帖
样例过不了,蒟蒻求助
1154634
riilhan楼主2023/11/14 17:46

如题,样例输出是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;
}
2023/11/14 17:46
加载中...