Cod sursa(job #504351)

Utilizator cioboata.iCioboata Ioan Liviu cioboata.i Data 27 noiembrie 2010 15:32:22
Problema Barbar Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<cstdio>
const int N=1<<8;

int a[N][N];
char b[N][N];

int dlin[]={0,1,0,-1};
int dcol[]={-1,0,1,0};

struct punct
{
	int lin,col;
};

punct q[N*N];

int main()
{
	freopen("muzeu.in","r",stdin);
	freopen("muzeu.out","w",stdout);
	int n,i,j,u,p,c,xn,yn;
	scanf("%d\n",&n);
	for(i=0;i<=n+1;i++)
	{
		b[0][i]=-2;
		b[n+1][i]=-2;
		b[i][0]=-2;
		b[i][n+1]=-2;
	}
	u=0;
	p=1;
	for(i=1;i<=n;i++)
		gets(&b[i][1]);
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
		{
			if(b[i][j]=='P') 
			{
				a[i][j]=0;
				q[++u].lin=i;
				q[u].col=j;
			}
			else if (b[i][j]=='#') a[i][j]=-2;
			else a[i][j]=-1;
		}
	while( p<=u)
	{
		for(c=0;c<=3;c++)
		{
			xn=q[p].lin+dlin[c];
			yn=q[p].col+dcol[c];
			if( a[xn][yn]!=-2 &&  a[xn][yn]!=0 && ( a[xn][yn]==-1 || a[q[p].lin][q[p].col]+1 < a[xn][yn]) )
			{	
				a[xn][yn]=a[q[p].lin][q[p].col]+1;
			    q[++u].lin=xn;
				q[u].col=yn;
			}
		}
		p++;
	}
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
			printf("%d ",a[i][j]);
		printf("\n");
	}
	return 0;
}