8个RE
查看原帖
8个RE
773534
light_host楼主2023/10/18 19:21
#include<bits/stdc++.h>
using namespace std;
int n,m;
const int N = 1005;
int a[N][N];
bool f[N][N];
int fx[4] = {0,0,-1,1},fy[4] = {-1,1,0,0};
int q[1005][1005];
bool check(int x)
{
	memset(f,false,sizeof(f));
	int h = 1,t = 1;
	q[1][1] = 1;
	q[1][2] = 1;
	int tx,ty;
	while(h<=t){
		for(int i = 0;i<4;i++)
		{
			tx = q[h][1]+fx[i];
			ty = q[h][2]+fy[i];
			if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&!f[tx][ty]&&a[tx][ty]<=x)
			{
				t++;
				q[t][1] = tx;
				q[t][2] = ty;
				f[tx][ty] = true;
				if(tx==n)
				{
					return true;
				}
			}
		}
		h++;
	}
	return false;
}
int mn = INT_MAX,mx = INT_MIN;
int main()
{
	cin>>n>>m;
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			cin>>a[i][j];
			mn = min(mn,a[i][j]);
			mx = max(mx,a[i][j]);
		}
	}
	int l = mn,r = mx,mid;
	while(l<=r)
	{
        mid = (l+r)/2;
	    if(check(mid))
		{
		    r= mid-1;
		}
		else
		{
		    l = mid+1;
		}
	}
	cout<<l;
	return 0;
}
2023/10/18 19:21
加载中...