Cod sursa(job #257452)

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

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


int n,m;
char c;
int v[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;

int p,u;

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;
				v[i][j]=1;
			}
			
			if(c=='J')
			{
				J[0]=i;
				J[1]=j;
				v[i][j]=1;
			}
			
			if(c=='X')
            v[i][j]=-1;
		}
		scanf("%c",&c);
	}
	
}

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

void bfs()
{
	int i,j,q[N*M][2];
	int x[2],y[2];
	
	q[u][0]=J[0];
	q[u][1]=J[1];
	u++;
	q[u][0]=R[0];
	q[u][1]=R[1];
	
	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(v[y[0]][y[1]]==0)
			{
				u++;
				q[u][0]=y[0];
				q[u][1]=y[1];
				v[y[0]][y[1]]= 1 + v[x[0]][x[1]];
			}
		}
	}
}



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

int caut()
{
	int max=-100;
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=m;++j)
			if(v[i][j]!=-1)
			{
				if(v[i][j]>max)
				{
					max=v[i][j];
					c1=i;
					c2=j;
				}
			}
	}
	return max;
}

int main()
{
	freopen("rj.in","r",stdin);
	freopen("rj.out","w",stdout);
	
	citire();
	bord();
	bfs();
	//afisare();
	
	printf("%d %d %d",caut(),c1,c2);
	return 0;
}