Cod sursa(job #1659526)

Utilizator vlady1997Vlad Bucur vlady1997 Data 22 martie 2016 12:07:02
Problema Matrice 2 Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int a[301][301], b[301][301], lin[1000001], col[1000001];
const int dx[4]={-1,1,0,0};
const int dy[4]={0,0,-1,1};
int lee (int x1, int y1, int x2, int y2, int n)
{
    int i, j, x, y, p=1, r=1, nr;
    memset(b,0,sizeof(b)); memset(lin,0,sizeof(lin)); memset(col,0,sizeof(col));
    b[x1][y1]=a[x1][y1]; lin[1]=x1; col[1]=y1;
    while (p<=r)
    {
        nr=r;
        for (i=p; i<=r; i++)
        {
            for (j=0; j<4; j++)
            {
                x=lin[i]+dx[j];
                y=col[i]+dy[j];
                if (x<1 || y<1 || x>n || y>n) continue;
                if (b[x][y]==0 || min(b[lin[i]][col[i]],a[x][y])>b[x][y])
                {
                    b[x][y]=min(b[lin[i]][col[i]],a[x][y]);
                    lin[++nr]=x;
                    col[nr]=y;
                }
            }
        }
        p=r+1; r=nr;
    }
    return b[x2][y2];
}
int main()
{
    int n, t, i, j, x1, y1, x2, y2, sol;
    freopen("matrice2.in","r",stdin);
    freopen("matrice2.out","w",stdout);
    scanf("%d%d",&n,&t);
    for (i=1; i<=n; i++)
        for (j=1; j<=n; j++) scanf("%d",&a[i][j]);
    for (i=1; i<=t; i++)
    {
        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
        sol=lee(x1,y1,x2,y2,n);
        printf("%d\n",sol);
    }
    return 0;
}