Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <queue>
- #define N 1001
- using namespace std;
- const int dx[]={-1,0,1, 0},
- dy[]={ 0,1,0,-1};
- int n,a[N][N],rez,v[N][N],pas=1<<16;
- queue <pair<int,int>> Q;
- int Lee(int k)
- {
- for(int i=1;i<=n;++i)
- for(int j=1;j<=n;++j)
- v[i][j]=0;
- if(a[1][1]<=k)
- Q.push(make_pair(1,1));
- else
- return 0;
- while(Q.size()&&!v[n][n])
- {
- int x=Q.front().first;
- int y=Q.front().second;
- Q.pop();
- for(int i=0;i<4;++i)
- {
- int xx=x+dx[i];
- int yy=y+dy[i];
- if(!v[xx][yy]&&a[xx][yy]<=k)
- v[xx][yy]=1,Q.push(make_pair(xx, yy));
- }
- }
- while(Q.size())
- Q.pop();
- return v[n][n];
- }
- int main()
- {
- ifstream f("labirint.in");
- f>>n;
- for(int i=1;i<=n;++i)
- for(int j=1;j<=n;++j)
- f>>a[i][j];
- f.close();
- for(int i=0;i<=n+1;++i)
- for(int j=0;j<=n+1;++j)
- v[i][j]=1;
- for(;pas;pas>>=1)
- if(!Lee(rez+pas))
- rez+=pas;
- ofstream g("labirint.out");
- g<<rez+1;
- g.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement