Cod sursa(job #45960)

Utilizator chermanCorina Herman cherman Data 2 aprilie 2007 10:14:51
Problema Secventa 2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.09 kb
#include <fstream>
#include <iostream>


using namespace std;


const int MAX = 1001;
const int INTMAX = 127;
ifstream in("padure.in");
ofstream out("padure.out");

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

void read()
{
    in >> n >> m >> pl >> pc >> cl >> cc;

    for ( int i = 0; i < n; ++i )
        for ( int j = 0; j < m; ++j )
            in >> a[i][j];

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

struct coada
{
    short x, y;
};

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

void print()
{
    cout << n << " " << m << " " << pl << " " << pc << " " << cl << " " << cc << endl;
    for ( int i = 0; i < n; ++i )
    {
        for ( int j = 0; j < m; ++j )
            cout << (int)b[i][j] << " ";
        cout << endl;
    }
    cout << endl;
}

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 )
                {
                    ++u;
                    lee[u].x = X;
                    lee[u].y = Y;
                    //vis[X][Y] = 1;

                    b[X][Y] = D;
                    cout << lee[u-1].x << " " << lee[u-1].y << endl;
                    //cout << p << " " << u << endl << endl;

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

int main()
{
    read();
    sol();
    //print();
    cout << (int)b[cl-1][cc-1] << endl;
    out << (int)b[cl-1][cc-1] << endl;

    return 0;
}