蒟蒻求救!
查看原帖
蒟蒻求救!
549662
孟泰颉NAZI楼主2022/1/2 13:45

全RE

#include<bits/stdc++.h>
using namespace std;
int mapp[1010][1010],vis[1010][1010],n,m;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
struct node{
	int x,y;
};
queue<node>q;
int check(int mid){
	for(int i=0;i<1010;i++){
		for(int j=0;j<1010;i++){
			vis[i][j]=0;
		}
	}
	node start,now,next;
	start.x=1,start.y=1;
	q.push(start);
	vis[1][1]=1;
	while(q.empty()==0){
		now=q.front();
		q.pop();
		for(int i=0;i<4;i++){
			next.x=now.x+dx[i];
			next.y=now.y+dy[i];
			if(next.x>1&&next.y>=1&&next.x<=n&&next.y<=m
				&&vis[next.x][next.y]==0&&mapp[next.x][next.y]<=mid){
					vis[next.x][next.y]=1;
					q.push(next);
			}
		}
	}
	int flag=1;
	for(int i=1;i<=m;i++){
		if(vis[n][i]==0){
			flag=0;
		}
	}
	if(flag==0) return 0;
	else return 1;
}
int main(){
	cin>>n>>m;
	int l=0,r=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>mapp[i][j];
			r=max(r,mapp[i][j]);
		}	
	}
	while(l<=r){
		int mid=(l+r)/2;
		if(check(mid)==1) r=mid-1;
		else l=mid+1;
	}
	if(check(l)==1) cout<<l<<endl;
	else cout<<r<<endl;
	return 0;
}
2022/1/2 13:45
加载中...