求助!71分BFS!
查看原帖
求助!71分BFS!
1044870
Lyrith_with_xQ楼主2023/8/30 11:47
#include <bits/stdc++.h>
using namespace std;

struct node
{
	int x,y,s;
};

queue<node> q;
int n,x,y,t,mp[301][301],nxt[4][2]={{1,0},{-1,0},{0,1},{0,-1}},ans=1e9;
bool vis[301][301];

bool in_area(int x,int y)
{
	return (x>=0&&x<301&&y>=0&&y<301);
}

void bfs()
{
	vis[0][0]=true;
	q.push({0,0,0});
	while(!q.empty())
	{
		node a=q.front();
		q.pop();
		if(mp[a.x][a.y]==-1)ans=min(ans,a.s);
		else if(mp[a.x][a.y]<=a.s)continue;
		for(int i=0;i<4;i++)
		{
			int nx=a.x+nxt[i][0],ny=a.y+nxt[i][1];
			if(!in_area(nx,ny)||vis[nx][ny])continue;
			vis[nx][ny]=true;
			q.push({nx,ny,a.s+1});
		}
	}
}

int main()
{
	memset(mp,-1,sizeof(mp));
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>x>>y>>t;
		mp[x][y]=t;
		for(int j=0;j<4;j++)
		{
			if(!in_area(x+nxt[j][0],y+nxt[j][1]))continue;
			if(mp[x+nxt[j][0]][y+nxt[j][1]]!=-1)mp[x+nxt[j][0]][y+nxt[j][1]]=min(t,mp[x+nxt[j][0]][y+nxt[j][1]]);
			else mp[x+nxt[j][0]][y+nxt[j][1]]=t;
		}
	}
	bfs();
	if(ans!=1e9)cout<<ans;
	else cout<<"-1";
	return 0;
} 

大小细节差不多都考虑到了,却71分,哪里错了?

2023/8/30 11:47
加载中...