Cod sursa(job #46225)

Utilizator chermanCorina Herman cherman Data 2 aprilie 2007 13:52:09
Problema Secventa 2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.21 kb
#include <iostream>


using namespace std;


const int MAX = 1001;
const int INTMAX = 127;
FILE *in = fopen("padure.in", "r"), *out = fopen("padure.out", "w");

short a[MAX][MAX];
short g[MAX][MAX];
char b[MAX][MAX];
int n, m, pl, pc, cl, cc;
int nn,mm;

void read()
{
    fscanf(in,"%u",&n);
    fscanf(in,"%u",&m);
    fscanf(in,"%u",&pl);
    fscanf(in,"%u",&pc);
    fscanf(in,"%u",&cl);
    fscanf(in,"%u",&cc);

    for ( int i = 0; i < n; ++i )
        for ( int j = 0; j < m; ++j )

            fscanf(in,"%d",&a[i][j]);

    for ( int i = 0; i < n; ++i )
        for ( int j = 0; j < m; ++j )
            b[i][j] = INTMAX;
}

struct coada
{
    int x, y;
};

coada lee[1600000];
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};


void grup()
{
    for ( int i = 0; i < n; ++i )
        for ( int j = 0; j < m; ++j )
         g[i][j]=a[i][j];
    nn=n;mm=m;
}


void sol()
{
    int p = 0, u =0;
    lee[p].x = pl-1;
    lee[p].y = pc-1;
    b[lee[p].x][lee[p].y] = 0;

    while ( p <= u )
    {
        for ( int i = 0; i < 4; ++i )
        {
                int X = lee[p].x + dx[i];
                int Y = lee[p].y + dy[i];
                int D = b[lee[p].x][lee[p].y];

                if ( X < n && Y < m && X >= 0 && Y >= 0
                    && b[X][Y] > D )
                {
                    if(lee[u].x != X ||lee[u].y != Y)
                    {
                    ++u;
                    lee[u].x = X;
                    lee[u].y = Y;
                    //vis[X][Y] = 1;
                    //cout << lee[u].x << " " << lee[u].y << endl;
                    }

                    b[X][Y] = D;
                    //cout << p << " " << u << endl << endl;

                    if ( g[X][Y] != g[lee[p].x][lee[p].y] )
                    {
                        b[X][Y] = D+1;
                        //++u;
                        //lee[u].x = X;
                        //lee[u].y = Y;
                    }
                }
        }
        ++p;
    }

    //cout << (int)b[cl-1][cc-1] << endl;
    fprintf(out,"%u",(int)b[cl-1][cc-1]);
}

int main()
{
    read();
    /*
    grup();
    */
    sol();

    return 0;
}