签合网站是哪个好app渠道推广
1.bfs遍历图,若二分的x可以满足到第n行,true
2.dfs太慢了,不能快速遍历后结束
3.二分答案--最大值最小问题
#include<bits/stdc++.h>
using namespace std;
#define N 100011
typedef long long ll;
typedef pair<ll,int> pii;
int n,m;
map<int,int> mp[1005];
bool bo[1010][1010];
int an;
int f;
int w;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
typedef struct di
{int x,y;
}di;
void bfs(int x,int y)
{queue<di> q;q.push({x,y});bo[x][y]=true;while(q.size()){di t=q.front();q.pop();if(t.x==n) {f=0;break; }for(int i=0;i<4;i++){int tx=t.x+dx[i];int ty=t.y+dy[i];if(tx>=1&&tx<=n&&ty<=m&&ty>=1&&!bo[tx][ty]&&mp[tx][ty]<=w){bo[tx][ty]=true;q.push({tx,ty});}}}
}
bool check(int x)
{f=1;w=x;bfs(1,1);if(!f) return true;return false;
}
int main() {ios::sync_with_stdio(0);cout.tie(0);cin.tie(0);cin>>n>>m;int ma=0;for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>mp[i][j],ma=max(mp[i][j],ma);int l=0,r=ma;while(l<=r){int mid=(l+r)>>1;memset(bo,false,sizeof(bo));if(check(mid)){an=mid;r=mid-1;}else l=mid+1;}cout<<an;return 0;
}