求助daola,比对了题解但找不出来问题
  • 板块P1902 刺杀大使
  • 楼主zyx15
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/8/16 17:12
  • 上次更新2023/11/3 03:20:22
查看原帖
求助daola,比对了题解但找不出来问题
946334
zyx15楼主2023/8/16 17:12
#include<bits/stdc++.h>
using namespace std;
int la[4]={0,1,0,-1};
int lb[4]={1,0,-1,0};
int n,m,a[1100][1100],l=1e9,r=0;
bool c[1010][1010];
bool pd(int x,int y){
	return x>=1&&x<=n&&y>=1&&y<=m&&!c[x][y];
}
struct re{
	int x,y;
};
queue<re> q;
bool check(int s){
	while(!q.empty()){
		re x=q.front(); q.pop();
		for(int i=0;i<4;i++){
			if(pd(x.x+la[i],x.y+lb[i])&&a[x.x+la[i]][x.y+lb[i]]<=s){
				q.push((re){x.x+la[i],x.y+lb[i]});
				c[x.x+la[i]][x.y+lb[i]]=1;
				if(x.x+la[i]==n) return 1;
			}
		}
	}
	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];
			l=min(a[i][j],l);
			r=max(a[i][j],r);
		}
	}
	while(l<r){
	    q.push((re){1,1});
        memset(c,false,sizeof(c));
	    int mid=(l+r)/2;
	    if(check(mid)) r=mid;
	    else l=mid+1;
	}
	cout<<l;
	return 0;
} 
2023/8/16 17:12
加载中...