20分求助
  • 板块P1902 刺杀大使
  • 楼主__zzh
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/8/7 22:27
  • 上次更新2023/10/27 16:32:12
查看原帖
20分求助
132352
__zzh楼主2022/8/7 22:27
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int n,m;
queue<pair<int,int>> q;
bool book[1001][1001];
int a[1001][1001];
int Next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int max1=0;
bool check(int x)
{
	memset(book,0,sizeof(book));
	q.push(make_pair(1,1));
	while(!q.empty())
	{
		int xx=q.front().first;
		int yy=q.front().second;
		q.pop();
		if(book[xx][yy]==1) continue;
		book[xx][yy]=1;
		for(int k=0;k<=3;k++)
		{
			int tx=xx+Next[k][0];
			int ty=yy+Next[k][1];
			if(a[tx][ty]>x) continue;
			if(tx<=0||ty<=0||tx>n||ty>m||book[tx][ty]||a[tx][ty]==-1) continue;
			if(a[tx][ty]==0&&tx==n) return 1;
			q.push(make_pair(tx,ty));
		}
	}
	return 0;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
			if(a[i][j]>max1)
			max1=a[i][j];
		}
	}
	int l=0,r=max1;
	while(l<r)
	{
		int i=(l+r)>>1;
		if(check(i)){
			r=i;
		}
		else {
			l=i+1;
		}
	}
	cout<<l+1<<endl;
	return 0;
}
2022/8/7 22:27
加载中...