Cod sursa(job #1296786)

Utilizator Darius15Darius Pop Darius15 Data 21 decembrie 2014 15:10:57
Problema Matrice 2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
#include <queue>
using namespace std;
typedef pair <int,int> co;
ifstream f("matrice2.in");
ofstream g("matrice2.out");
int dl[]={-1,0,0,1},j,st,dr,best,m,dc[]={0,1,-1,0},n,qu,a[301][301],i,x,y,pi,pf;
queue <co> q;
bool parcurgere(int m)
{
    int z,xx,yy;
    while(!q.empty())
        q.pop();
   if (a[x][y]>=m) q.push(make_pair(x,y));
   while(!q.empty())
   {
       xx=q.front().first;
       yy=q.front().second;
       if (xx==pi && yy==pf) return true;
       q.pop();
       for (z=0;z<=3;z++)
        if (xx+dl[z]>=1 && yy+dc[z]>=1 && xx+dl[z]<=n && yy+dc[z]<=n)
        if (a[xx+dl[z]][yy+dc[z]]>=m )
            q.push(make_pair(xx+dl[z],yy+dc[z]));
   }
   return false;
}
int main()
{
   f>>n>>qu;
   for (i=1;i<=n;i++)
        for (j=1;j<=n;j++)
        f>>a[i][j];
   for (i=1;i<=qu;i++)
   {
       f>>x>>y>>pi>>pf;
       st=1,dr=1000000;
       while(st<=dr)
       {
           m=(st+dr)/2;
           if (parcurgere(m)==true) best=m,st=m+1;
           else dr=m-1;
       }
       g<<best<<'\n';
   }
    return 0;
}