Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N=1010;
- int a[N][N];
- bool ch[1000010];
- vector <int> v;
- int mn=1e9;
- int sx,sy,tx,ty;
- int n;
- bool area(int y,int x){
- return y>0&&y<=n&&x>0&&x<=n;
- }
- int dx[]={0,1,0,-1};
- int dy[]={1,0,-1,0};
- bool dfs(int f,int y,int x,bool visited[N][N]){
- if(y==ty&&x==tx) return true;
- if(visited[y][x]) return false;
- visited[y][x]=true;
- for(int d=0;d<4;++d){
- int i=y+dy[d],j=x+dx[d];
- if(area(i,j)&&a[i][j]<=f)
- if(dfs(f,i,j,visited)) return true;
- }
- return false;
- }
- void bsearch(int l,int r){
- while(l<=r){
- int m=(l+r)/2;
- bool visited[N][N]={};
- if(dfs(v[m],sy,sx,visited)){
- r=m-1;
- mn=min(mn,v[m]);
- }else
- l=m+1;
- }
- }
- int main()
- {
- scanf("%d",&n);
- bool c=true;
- for(int i=1;i<=n;++i){
- for(int j=1;j<=n;++j){
- scanf("%d",&a[i][j]);
- if(!ch[a[i][j]] && a[i][j]){
- v.push_back(a[i][j]);
- ch[a[i][j]]=true;
- }
- if(c&&!a[i][j]){ sy=i; sx=j; c=!c;}
- if(!c&&!a[i][j]){ ty=i; tx=j;}
- }
- }
- sort(v.begin(),v.end());
- bsearch(0,v.size()-1);
- printf("%d",mn);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement