Pagini recente » Cod sursa (job #300389) | Cod sursa (job #1083461) | Cod sursa (job #808590) | Cod sursa (job #927694) | Cod sursa (job #927383)
Cod sursa(job #927383)
# 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;
}