Cod sursa(job #122726)

Utilizator znakeuJurba Andrei znakeu Data 13 ianuarie 2008 15:59:15
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.81 kb
#include <stdio.h>
struct gaina
{
	int x,y;	
};
int d[105][105][3];
gaina cdg[12005];
int n,m,x1,y1,x2,y2,k;
int dl[]={-1,0,1,0,-1,-1,1,1};
int dc[]={0,1,0,-1,1,-1,1,-1};

int main()
{
	FILE *in  = fopen("rj.in","r");
	FILE *out = fopen("rj.out","w");
	
	int x,i,y,j,tmin;
	char c;
	
	fscanf(in,"%d%d",&n,&m);
	for (j=0; j<2; j++)
		for (i=0; i<=n+1; i++)
		{
			d[i][0][j]=-1;
			d[i][m+1][j]=-1;
		}
	for (j=0; j<2; j++)
		for (i=0; i<=m+1; i++)
		{
			d[0][i][j]=-1;
			d[n+1][i][j]=-1;
		}
	
	for (i=1; i<=n; i++)
	{
		fscanf(in,"%c",&c);
		for (j=1; j<=m; j++)
		{
			fscanf(in,"%c",&c);
			if (c=='X')
			{
				d[i][j][0]=-1;
				d[i][j][1]=-1;
			}
			if (c=='R')
			{
				d[i][j][0]=1;
				d[i][j][1]=-1;
				x1=i; y1=j;
			}
			if (c=='J')
			{
				d[i][j][0]=-1;
				d[i][j][1]=1;
				x2=i; y2=j;
			}
		}
		
		
		
	}
	
	k=1;
	cdg[0].x=x1;
	cdg[0].y=y1;
	for (i=0; i<k; i++)
		for (j=0; j<8; j++)
			if(d[cdg[i].x+dl[j]][cdg[i].y+dc[j]][0]==0)
			{
				cdg[k].x=cdg[i].x+dl[j];
				cdg[k].y=cdg[i].y+dc[j];
				k++;
				d[cdg[i].x+dl[j]][cdg[i].y+dc[j]][0]=d[cdg[i].x][cdg[i].y][0]+1;				
			}
	
	for (i=0; i<10005; i++)
	{
		cdg[i].x=0;
		cdg[i].y=0;
	}
	k=1;
	cdg[0].x=x2;
	cdg[0].y=y2;
	for (i=0; i<k; i++)
		for (j=0; j<8; j++)
			if(d[cdg[i].x+dl[j]][cdg[i].y+dc[j]][1]==0)
			{
				cdg[k].x=cdg[i].x+dl[j];
				cdg[k].y=cdg[i].y+dc[j];
				k++;
				d[cdg[i].x+dl[j]][cdg[i].y+dc[j]][1]=d[cdg[i].x][cdg[i].y][1]+1;				
			}
	
	tmin=-1;
	x=0;
	y=0;
	for (i=1; i<=n; i++)
		for (j=1; j<=m; j++)
		if (d[i][j][0]==d[i][j][1] && d[i][j][0]!=-1 && d[i][j][0]!=0)
			if (tmin==-1 || tmin>d[i][j][0])
			{
				tmin=d[i][j][0];
				x=i;
				y=j;				
			}
	
	fprintf(out,"%d %d %d\n",tmin,x,y);
	
	fclose(in);
	fclose(out);
	return 0;
}