Cod sursa(job #1403275)

Utilizator Johny_Depp22Johnny Depp Johny_Depp22 Data 27 martie 2015 10:26:00
Problema Matrice 2 Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
#include <queue>
#include <cstring>
using namespace std;
ifstream f("matrice2.in");
ofstream g("matrice2.out");

int M, N, a[305][305], stx, sty, fnx, fny, vmax, dx[4]={-1, 0, 1, 0}, dy[4]={0, -1, 0, 1}, sol;
queue < pair <int, int> > Q;
int viz[305][305];

bool check(int val)
{
    if (a[stx][sty]<val) return 0;
    Q.push(make_pair(stx, sty));
    memset(viz, 0, sizeof(viz));

    viz[stx][sty]=1;
    while (Q.size())
    {
        pair <int, int> nod=Q.front(); Q.pop();
        for (int k=0; k<4; ++k)
        {
            int auxx=nod.first+dx[k], auxy=nod.second+dy[k];
            if (a[auxx][auxy]>=val && !viz[auxx][auxy])
                viz[auxx][auxy]=1, Q.push(make_pair(auxx, auxy));
        }
    }
    return (viz[fnx][fny]);
}

int main()
{
    f>>N>>M;
    for (int i=1; i<=N; ++i)
        for (int j=1; j<=N; ++j)
        {
            f>>a[i][j];
            if (a[i][j]>vmax) vmax=a[i][j];
        }

    while (M--)
    {
        f>>stx>>sty>>fnx>>fny; sol=0;
        for (int i=(1<<20); i; i>>=1)
            if (sol+i<=vmax && check(sol+i))
                sol+=i;

        g<<sol<<'\n';
    }
    return 0;
}