广搜水题求助
  • 板块学术版
  • 楼主Jamison
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/10/27 20:35
  • 上次更新2023/10/27 05:33:21
查看原帖
广搜水题求助
783941
Jamison楼主2022/10/27 20:35

本人是个搜索渣渣,考前练一下

#include<bits/stdc++.h>
using namespace std;
long long k,da[5]={0,1,-1,0,0},db[5]={0,0,0,-1,1};
struct node{
	int tim;
	int x,y;
}a[50005];
bool cmp(node a,node b)
{
	if(a.tim!=b.tim) return a.tim<b.tim;
	return a.x<b.x; 
}
queue<node> Q;
long long n,ans;
bool vis[305][305],y[305][305];
int main()
{
	memset(y,-1,sizeof(y));
	cin>>n;
	for(int i=1;i<=n;i++)
	   cin>>a[i].tim>>a[i].x>>a[i].y;
	sort(a+1,a+1+n,cmp);
	node tmp={0,0,0};
	Q.push(tmp);
	vis[0][0]=true;
	while(!Q.empty())
	{
		node tmp=Q.front();
		Q.pop();
		int tx=tmp.x,ty=tmp.y;
		vis[tx][ty]=true;
		for(int i=1;i<=4;i++)
		{
			if(a[i].tim==ans) 
			{
				y[tx][ty]=true;
				for(int i=1;i<=4;i++)
				{
					int dx=tx+da[i],dy=ty+db[i];
					if(!(dx<0 || dy<0 || dx>300 || dy>300 || vis[dx][dy])) y[dx][dy]=true;	
				}
			}
		}
		if(y[tx][ty]==-1) {cout<<ans;return 0;}
		for(int i=1;i<=4;i++)
		{
			int dx=tx+da[i],dy=ty+db[i];
			if(dx<0 || dy<0 || vis[dx][dy]) continue;
			Q.push(node{++ans,dx,dy});
			vis[dx][dy]=true;
		}
	}
	cout<<-1;
	return 0;
}

P2895广搜

2022/10/27 20:35
加载中...