Cod sursa(job #603467)

Utilizator preda_alexandruPreda Alexandru preda_alexandru Data 16 iulie 2011 16:00:26
Problema Matrice 2 Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <stdio.h>
#define NMAX 300


void f1(int A[NMAX][NMAX], int B[NMAX][NMAX], int N, int x)
{
    int i, j;
    for(i=0; i<N; i++)
        for(j=0; j<N; j++)
            B[i][j] = A[i][j]>=x ? 1 : 0;
}


int f2(int B[NMAX][NMAX], int N, int xc, int yc, int xf, int yf)
{
    if(xc==xf && yc==yf)
        return 1;
    
    if(xc<0 || xc>=N || yc<0 || yc>=N || !B[xc][yc])
        return 0;
    
    B[xc][yc] = 0;
    
    return f2(B, N, xc+1, yc, xf, yf) ||
               f2(B, N, xc-1, yc, xf, yf) ||
               f2(B, N, xc, yc+1, xf, yf) ||
               f2(B, N, xc, yc-1, xf, yf);
}


int main()
{
    FILE *fin, *fout;
    int i, j, N, Q, A[NMAX][NMAX], B[NMAX][NMAX], x1, y1, x2, y2, max12;
    
    
    fin = fopen("matrice.in", "rt");
    fout = fopen("matrice.out", "wt");
    
    
    fscanf(fin, "%d %d", &N, &Q);
    for(i=0; i<N; i++)
        for(j=0; j<N; j++)
            fscanf(fin, "%d", &A[i][j]);


    for(i=1; i<=Q; i++)
    {
        fscanf(fin, "%d %d %d %d", &x1, &y1, &x2, &y2);
        x1--; y1--; x2--; y2--;
        max12 = A[x1][y1]>A[x2][y2] ? A[x1][y1] : A[x2][y2];
        
        for(j=max12; j>=1; j--)
        {
            f1(A, B, N, j);
            if(f2(B, N, x1, y1, x2, y2))
            {
                fprintf(fout, "%d\n", j);
                break;
            }
        }
    }    

    fclose(fin);
    fclose(fout);
    return 0;
}