求助各位!!81分代码,6,10,14点错误,不知道为什么
查看原帖
求助各位!!81分代码,6,10,14点错误,不知道为什么
765564
aragorn133楼主2023/1/10 10:49
#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
typedef pair<int,int> PII;
const int N=500;
vector<PII>tra;
char a[N][N];
int num[N][N];
bool st[N][N];
int n,m,res,fx,fy;

void bfs(int x,int y)
{
	queue<PII>q;
	q.push({x,y});
	
	while(q.size())
	{
		PII t=q.front();
		q.pop();
		if(a[t.first][t.second]=='=') break;
		
		for(int i=0;i<4;i++)
		{
			int xx=t.first+dx[i],yy=t.second+dy[i];
			
			if(a[xx][yy]>='A'&&a[xx][yy]<='Z')
			{
				num[xx][yy]=num[t.first][t.second]+1;
				int len=tra.size();
				for(int k=0;k<len;k++)
				{
					if((tra[k].first!=xx||tra[k].second!=yy)&&a[tra[k].first][tra[k].second]==a[xx][yy])
					{
						num[tra[k].first][tra[k].second]=num[xx][yy];
						q.push(tra[k]);
						break;
					}
				}
			}
			else if((a[xx][yy]=='.'||a[xx][yy]=='=')&&st[xx][yy]==false&&xx>=1&&xx<=n&&yy>=1&&yy<=m)
			{
				st[xx][yy]=true;
				num[xx][yy]=num[t.first][t.second]+1;
				q.push({xx,yy});
			}
		}
	}
}

int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++) cin>>a[i][j];
	}
	
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(a[i][j]>='A'&&a[i][j]<='Z') tra.push_back({i,j});
			else if(a[i][j]=='=') fx=i,fy=j;
		}
	}
	
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(a[i][j]=='@') bfs(i,j);
		}
	}
	cout<<num[fx][fy];
}
2023/1/10 10:49
加载中...