Cod sursa(job #1952477)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 4 aprilie 2017 10:17:29
Problema Matrice 2 Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
using namespace std;

int dx[4]={-1,0,1,0};
int dy[4] = {0,1,0,-1};
int n,q,l,sol,a[310][310],u[310][310];
int sx[90010],sy[90010];
int verif(int x,int y,int h)
{
    return(x<=0||y<=0||x>n||y>n||u[x][y]||a[x][y]<h);
}
int bfs(int X1,int Y1,int X2,int Y2,int h)
{
    int i,j,xx,yy;
    for (i=1;i<=n;++i)
        for (j=1;j<=n;++j)
            u[i][j] = 0;
    l = 1;
    sx[l]=X1,sy[l]=Y1;
    u[X1][Y1]=1;
    for (i=1;i<=l;++i)
        for (j =0;j<4;++j)
        {
            xx=sx[i]+dx[j];
            yy=sy[i]+dy[j];
            if(verif(xx,yy,h))
                continue;
                sx[++l]=xx;
                sy[l]=yy;
                u[xx][yy]=1;
                if(xx==X2&&yy==Y2)
                    return 1;
        }
    return 0;
}

int main()
{
    ifstream f("matrice2.in");
    ofstream g("matrice2.out");
    int i,j,ix,iy,sx,sy;
    f>>n>>q;
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++)
            f>>a[i][j];
    for (i = 1; i <= q; i++)
    {
        f>>ix>>iy>>sx>>sy;
        int st=1, mij,dr=a[ix][iy];
        sol=0;
        while (st<=dr)
        {
            mij=(st+dr)/2;
            if (bfs(ix,iy,sx,sy,mij))
            {
                st=mij+1;
                sol=mij;
            }
            else
                dr=mij-1;
        }
        g<<sol<<"\n";
    }
    return 0;
}