Cod sursa(job #482013)

Utilizator S7012MYPetru Trimbitas S7012MY Data 2 septembrie 2010 13:11:50
Problema Asmax Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.21 kb
//#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string.h>
using namespace std;

int a[260][260],n;

struct coada{
 int x;
 int y;
}co[1000000],paz[1000000];

void extmat(int n) {
	int i;
	for(i=0; i<=n+1; i++) {
		a[0][i]=-2;
		a[n+1][i]=-2;
	}
	for(i=0; i<=n+1; i++) {
		a[i][0]=-2;
		a[i][n+1]=-2;
	}
}

int main()
{
	int i,j,np=0,inc,sfc;
	char cc[260];
	freopen("muzeu.in","r",stdin);
	ofstream g("muzeu.out");
	scanf("%d",&n);
	for(i=1; i<=n; i++) {
		scanf("%s",cc);
		cout<<cc<<'\n';
		for(j=0; j<n; j++) {
			if(cc[j]=='.') a[i][j+1]=-1;
			else if(cc[j]=='P') {
				np++;
				a[i][j+1]=0;
				paz[np].x=i;
				paz[np].y=j+1;
			}
			else a[i][j+1]=-2;
		}
	}
	extmat(n);
	/*g<<inc<<" "<<sfc<<endl;
			for(i=0; i<=n+1; i++) {
				for(j=0; j<=n+1; j++) g<<a[i][j]<<" ";
			g<<endl;
			}
			g<<endl;*/
	while(np) {
		//cout << np;
		inc=0; sfc=1;
		co[inc].x=paz[np].x;
		co[inc].y=paz[np].y;
		while (sfc>inc) {
			//x-1,y
			if(a[co[inc].x-1][co[inc].y]==-1 || a[co[inc].x-1][co[inc].y]>a[co[inc].x][co[inc].y]+1) 
			{
				a[co[inc].x-1][co[inc].y]=a[co[inc].x][co[inc].y]+1;
				co[sfc].x=co[inc].x-1;
				co[sfc].y=co[inc].y;
				sfc++;
			}
			//x,y+1
			if(a[co[inc].x][co[inc].y+1]==-1 ||a[co[inc].x][co[inc].y+1]>a[co[inc].x][co[inc].y]+1) 
			{
				a[co[inc].x][co[inc].y+1]=a[co[inc].x][co[inc].y]+1;
				
				co[sfc].x=co[inc].x;
				co[sfc].y=co[inc].y+1;
				sfc++;
			}
			
			//x+1,y
			if(a[co[inc].x+1][co[inc].y]==-1 || a[co[inc].x+1][co[inc].y]>a[co[inc].x][co[inc].y]+1) 
			{
				a[co[inc].x+1][co[inc].y]=a[co[inc].x][co[inc].y]+1;
				
				co[sfc].x=co[inc].x+1;
				co[sfc].y=co[inc].y;
				sfc++;
			}
		
			//x,y-1
			if(a[co[inc].x][co[inc].y-1]==-1 || a[co[inc].x][co[inc].y-1]>a[co[inc].x][co[inc].y]+1)
			{
				a[co[inc].x][co[inc].y-1]=a[co[inc].x][co[inc].y]+1;
				
				co[sfc].x=co[inc].x;
				co[sfc].y=co[inc].y-1;
				sfc++;
			}
			
			/*g<<inc<<" "<<sfc<<endl;
			for(i=1; i<=n; i++) {
				for(j=1; j<=n; j++) g<<a[i][j]<<" ";
			g<<endl;
			}
			g<<endl;*/
			inc++;
		}
		np--;
	}
	for(i=1; i<=n; i++) {
		for(j=1; j<=n; j++) g<<a[i][j]<<" ";
		g<<'\n';
	}
 g.close();
 return 0;
}