Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const int N=1010;
  5. int a[N][N];
  6. bool ch[1000010];
  7. vector <int> v;
  8. int mn=1e9;
  9. int sx,sy,tx,ty;
  10. int n;
  11.  
  12. bool area(int y,int x){
  13. return y>0&&y<=n&&x>0&&x<=n;
  14. }
  15.  
  16. int dx[]={0,1,0,-1};
  17. int dy[]={1,0,-1,0};
  18. bool dfs(int f,int y,int x,bool visited[N][N]){
  19. if(y==ty&&x==tx) return true;
  20. if(visited[y][x]) return false;
  21. visited[y][x]=true;
  22. for(int d=0;d<4;++d){
  23. int i=y+dy[d],j=x+dx[d];
  24. if(area(i,j)&&a[i][j]<=f)
  25. if(dfs(f,i,j,visited)) return true;
  26. }
  27. return false;
  28. }
  29.  
  30. void bsearch(int l,int r){
  31. while(l<=r){
  32. int m=(l+r)/2;
  33. bool visited[N][N]={};
  34. if(dfs(v[m],sy,sx,visited)){
  35. r=m-1;
  36. mn=min(mn,v[m]);
  37. }else
  38. l=m+1;
  39. }
  40. }
  41.  
  42. int main()
  43. {
  44. scanf("%d",&n);
  45. bool c=true;
  46. for(int i=1;i<=n;++i){
  47. for(int j=1;j<=n;++j){
  48. scanf("%d",&a[i][j]);
  49. if(!ch[a[i][j]] && a[i][j]){
  50. v.push_back(a[i][j]);
  51. ch[a[i][j]]=true;
  52. }
  53. if(c&&!a[i][j]){ sy=i; sx=j; c=!c;}
  54. if(!c&&!a[i][j]){ ty=i; tx=j;}
  55. }
  56. }
  57. sort(v.begin(),v.end());
  58. bsearch(0,v.size()-1);
  59. printf("%d",mn);
  60. return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement