Cod sursa(job #927383)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 25 martie 2013 19:26:58
Problema Rsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.82 kb
# include <fstream>
# define dim 1010
# define lim 1007010
using namespace std;

struct
{
    short x,y;
}c[lim];

short harta[dim][dim],m,n,p;
int drum[dim][dim],ind;

/*
    N - lin-1,col
    E - lin,col+1
    S - lin+1,col
    V - lin,col-1

    NE - lin-1,col+1
    NV - lin-1,col-1
    SV - lin+1,col-1
    SE - lin+1,col+1
*/

short dx[] = {-1,0,1,0,-1,-1,1,1};
short dy[] = {0,1,0,-1,1,-1,-1,1};
# define nr_d 8

void Citeste()
{
    ifstream in("pescari.in");
    short i,j;
    ind = -1;
    in >> m >> n >> p;
    for( i = 1 ; i <= n ; ++i )
        for( j = 1 ; j <= m ; ++j )
        {
            in >> harta[i][j];
            if( harta[i][j] != 2 )
                drum[i][j] = n*m+1;
            else
            {
                drum[i][j] = 0;
                ++ind;
                c[ind].x = i;
                c[ind].y = j;
            }
        }
    in.close();
}

bool Ok( short lin, short col , short x , short y )
{
    return ( ( lin+x >= 1 && lin+x <= n ) && ( col+y >= 1 && col+y <= m ) ) && drum[lin+x][col+y] > drum[lin][col] + 1;
}

void Traseu()
{
    short lin,col,j;
    for( int i = 0 ; i <= ind ; ++i )
    {
        lin = c[i].x;
        col = c[i].y;
        for( j = 0 ; j < nr_d ; ++j )
            if( Ok(lin,col,dx[j],dy[j]) )
            {
                ++ind;
                c[ind].x = lin+dx[j];
                c[ind].y = col+dy[j];
                drum[lin+dx[j]][col+dy[j]] = drum[lin][col]+1;
            }
    }
}

void Tipar()
{
    ofstream out("pescari.out");
    short i,j;
    for( i = 1 ; i <= n ; ++i )
        for( j = 1 ; j <= m ; ++j )
            if( harta[i][j] == 1 )
                out << drum[i][j] << '\n';
    out.close();
}

int main()
{
    Citeste();
    Traseu();
    Tipar();

    return 0;
}