Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- constexpr int maxn = 110;
- int dx[] = {0,0,-1,1};
- int dy[] = {-1,1,0,0};
- int a[maxn][maxn];
- int bio[maxn][maxn];
- int n,gmax=-1,gmin=1000;
- int cmin, cmax;
- bool check(int x, int y){
- return x >= 0 && x < n && y >= 0 && y < n &&
- a[x][y] >= cmin && a[x][y] <= cmax && !bio[x][y];
- }
- bool solve(){
- queue<pair<int,int>> q;
- q.push(make_pair(0,0));
- while(!q.empty()){
- int x = q.front().first;
- int y = q.front().second;
- if(x == n-1 && y == n-1)
- return true;
- q.pop();
- bio[x][y] = true;
- //printf("nalazim se u %d %d\n",x,y);
- for(int i = 0; i < 4; ++i){
- int sx = x + dx[i];
- int sy = y + dy[i];
- // printf("idem u %d %d\n",sx,sy);
- if(!check(sx,sy)) continue;
- q.push(make_pair(sx,sy));
- }
- }
- return false;
- }
- int main(){
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- scanf("%d",&n);
- for(int i = 0; i < n; ++i){
- for(int j = 0; j < n; ++j){
- scanf("%d",&a[i][j]);
- gmax = max(gmax,a[i][j]);
- gmin = min(gmin,a[i][j]);
- }
- }
- for(int i = 0; i <= gmax - gmin; ++i){ //iteriranje po svim mogucim razlikama
- for(int j = gmin; j <= gmax - i; ++j){ // isprobavanje postoji li staza za sve moguce intervale duljine i
- cmin = j;
- cmax = j+i;
- // printf("cmin je %d cmax je %d\n",cmin,cmax);
- if(a[0][0] < cmin || a[0][0] > cmax) continue;
- memset(bio,0,sizeof(bio));
- if(solve()){
- cout << i;
- return 0;
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement