avatar
MTWALK

dvaath 1.7K 4th Feb, 2020

#include <bits/stdc++.h>
#define MAX 111
using namespace std;

int n, a[MAX][MAX], visited[MAX][MAX], res;

void DFS(int x , int y , int st, int en)
{
    if (x==n && y==n) return ;

    for (int i=-1; i<=1; i++)
        for (int j=-1; j<=1;j++)
    {
        if ((i==0 )^ (j==0) && !visited[x+i][y+j])
        {
            if (x+i>0 && x+i<=n && y+j>0 && y+j<=n && a[x+i][y+j]>=st && a[x+i][y+j]<=en)
            {
                visited[x+i][y+j]=true;
                DFS(x+i, y+j, st,en);
                visited[x+i][y+j]=false;

            }
        }
    }
}

int main()
{
    cin >> n;
    for (int i=1; i<=n; i++)
        for (int j=1; j<=n; j++)
            cin >> a[i][j];

    int l=0, r=MAX;

    while (l<=r)
    {
        int mid=(l+r) /2;
        for (int i=0; i<= a[1][1]; i++)
        {
            memset(visited,0,sizeof visited);
            visited[1][1]=true;
            DFS(1,1,i,i+mid);
            if (visited[n][n])
            {
                break;
            }
        }

        if (visited[n][n])
        {
            cout<<mid<<endl;
            r=mid-1;
            res=mid;
        }
        else l=mid+1;
    }

    cout<<res;

}
C++
Description

No description

To share this paste please copy this url and send to your friends
RAW Paste Data