求助二分+bfs
  • 板块P1902 刺杀大使
  • 楼主q1uple
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/7/3 10:54
  • 上次更新2023/10/27 22:01:35
查看原帖
求助二分+bfs
539133
q1uple楼主2022/7/3 10:54
#include<bits/stdc++.h> 
using namespace std;
int n,m,a[1005][1005],l,r,mid,vis[1005][1005],ans;
int dx[4]={1,0,0,-1};
int dy[4]={0,1,-11,0};
struct node{
	int x,y;
};

int c(int maxn)
{
	queue<node>q;
	q.push((node){1,1});
	vis[1][1]=1;
	while(!q.empty())
	{
		node now=q.front();
		q.pop();
		for(int i=0;i<=3;i++)
		{
			int tx=now.x+dx[i];
			int ty=now.y+dy[i];
			if(tx<=0||ty<=0||tx>n||ty>m||vis[tx][ty]==1||a[tx][ty]>maxn)
			{
				continue;
			}
			vis[tx][ty]=1;
			q.push((node){tx,ty});
			if(tx==n)
			{
				return 1;
			}
		}
	}
	return 0;
}

int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)	
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
			r=max(r,a[i][j]);
			l=min(l,a[i][j]);
		}
	}
	while(l<r)
	{
		mid=(l+r)>>1;
		memset(vis,0,sizeof(vis));
		if(c(mid))
		{
			r=mid,mid=ans;
		}
		else
		{
			l=mid+1;
		}
	}
	cout<<ans;
	return 0;
}
2022/7/3 10:54
加载中...