Cod sursa(job #257479)

Utilizator ciorile.chioareBogatu Adrian ciorile.chioare Data 13 februarie 2009 13:36:09
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
//rj

#include <stdio.h>
#define N 110
#define M 110


int n,m;
char c;
int v1[N][M],v2[N][M];
int R[2],J[2];

int dx[]={0,0,-1,1,-1,1,-1,1};
int dy[]={-1,1,0,0,-1,1,1,-1};

int c1,c2;

void citire()
{
	int i,j;
	scanf("%d%d\n",&n, &m);
	for(i=1;i<=n;++i)
	{
		for(j=1;j<=m;++j)
		{
			scanf("%c",&c);
			
			if(c=='R')
			{
				R[0]=i;
				R[1]=j;
				v1[i][j]=1;
			}
			
			if(c=='J')
			{
				J[0]=i;
				J[1]=j;
				v1[i][j]=1;
			}
			
			if(c=='X')
            v1[i][j]=-1;
		}
		scanf("%c",&c);
	}
	
}

void bord()
{
	for(int i=0;i<=n+1;++i)
	{
		v1[i][0]=v1[i][n+1]=-1;
	}
	
	for(int i=0;i<=m+1;++i)
	{
		v1[0][i]=v1[m+1][i]=-1;
	}
	
}

void bfs1()
{
	int i,q[N*M][2];
	int x[2],y[2];
	int p=0,u=0;
	
	q[u][0]=R[0];
	q[u][1]=R[1];
	u++;
	while(p<=u)
	{
		x[0]=q[p][0];
		x[1]=q[p][1];
		p++;
		
		for(i=0;i<8;++i)
		{
			y[0]=x[0]+dx[i];
			y[1]=x[1]+dy[i];
			
			if(v1[y[0]][y[1]]==0)
			{
				u++;
				q[u][0]=y[0];
				q[u][1]=y[1];
				v1[y[0]][y[1]]= 1 + v1[x[0]][x[1]];
			}
		}
	}
}

void bfs2()
{
	int i,q[N*M][2];
	int x[2],y[2];
	int p=0,u=0;
	
	q[u][0]=J[0];
	q[u][1]=J[1];
	u++;
	while(p<=u)
	{
		x[0]=q[p][0];
		x[1]=q[p][1];
		p++;
		
		for(i=0;i<8;++i)
		{
			y[0]=x[0]+dx[i];
			y[1]=x[1]+dy[i];
			
			if(v2[y[0]][y[1]]==0)
			{
				u++;
				q[u][0]=y[0];
				q[u][1]=y[1];
				v2[y[0]][y[1]]= 1 + v2[x[0]][x[1]];
			}
		}
	}
}


void vect()
{
	for(int i=0;i<=n+1;++i)
	{
		for(int j=0;j<=m+1;++j)
			v2[i][j]=v1[i][j];
	}
}


void afisare(int V[N][M])
{
	for(int i=0;i<=n+1;++i)
	{
		for(int j=0;j<=m+1;++j)
			printf("%3d",V[i][j]);
		printf("\n");
	}
}

int main()
{
	freopen("rj.in","r",stdin);
	freopen("rj.out","w",stdout);
	
	citire();
	bord();
	vect();
	bfs1();	
	//bfs2();
	afisare(v1);
	printf("\n");
	afisare(v2);
	
	
	return 0;
}