Cod sursa(job #121595)

Utilizator alex3el_n2oAlex Vladescu alex3el_n2o Data 8 ianuarie 2008 23:58:22
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 5.77 kb
#include <stdio.h>
#include <string.h>
FILE *f=fopen("rj.in","r"), *g=fopen("rj.out","w");
int y[115][115],z[115][115];
struct coada
{
int a,b;
} cod1[11002];
char s[120],x[115][115];
int main()
{
int t,min=12000,poz1,poz2,in1,in2,sf1,sf2,m,n,i,j,RI,RJ,JI,JJ;
fscanf(f,"%d %d\n",&m,&n);
for (i=1;i<=m;i++)
	{
	fgets(s,114,f);
	for (j=1;j<=strlen(s);j++)
		{
		x[i][j]=s[j-1];
		if (s[j-1]=='R')
			{
			RI=i;
			RJ=j;
			}
		if (s[j-1]=='J')
			{
			JI=i;
			JJ=j;
			}
		if (s[j-1]=='\n') t=j;
		}
	for (j=t;j<=n;j++)
		x[i][j]=' ';
	}
for (i=0;i<=n+1;i++)
	x[0][i]='X';
for (i=1;i<=m+1;i++)
	x[n+1][i]='X';
for (i=n;i>=0;i--)
	x[m+1][i]='X';
for (i=m-1;i>=0;i--)
	x[0][i]='X';
cod1[1].a=RI;
cod1[1].b=RJ;
in1=1;
in2=1;
sf1=1;
sf2=1;
x[RI][RJ]='r';
while (in1<=sf1)
	{
	 if ((x[cod1[in1].a+1][cod1[in1].b]!='X')&&(cod1[in1].a!=m)&&(x[cod1[in1].a+1][cod1[in1].b]!='r'))
		{
		cod1[++sf1].a=cod1[in1].a+1;
		cod1[sf1].b=cod1[in1].b;
		y[cod1[sf1].a][cod1[sf1].b]=y[cod1[in1].a][cod1[in1].b]+1;
		x[cod1[in1].a+1][cod1[in1].b]='r';
		}
	 if ((x[cod1[in1].a+1][cod1[in1].b+1]!='X')&&(cod1[in1].a!=m)&&(cod1[in1].b!=n)&&(x[cod1[in1].a+1][cod1[in1].b+1]!='r'))
		{
		cod1[++sf1].a=cod1[in1].a+1;
		cod1[sf1].b=cod1[in1].b+1;
		y[cod1[sf1].a][cod1[sf1].b]=y[cod1[in1].a][cod1[in1].b]+1;
		x[cod1[in1].a+1][cod1[in1].b+1]='r';
		}
	 if ((x[cod1[in1].a-1][cod1[in1].b-1]!='X')&&(cod1[in1].a!=1)&&(cod1[in1].b!=1)&&(x[cod1[in1].a-1][cod1[in1].b-1]!='r'))
		{
		cod1[++sf1].a=cod1[in1].a-1;
		cod1[sf1].b=cod1[in1].b-1;
		y[cod1[sf1].a][cod1[sf1].b]=y[cod1[in1].a][cod1[in1].b]+1;
		x[cod1[in1].a-1][cod1[in1].b-1]='r';
		}
	 if ((x[cod1[in1].a+1][cod1[in1].b-1]!='X')&&(cod1[in1].a!=m)&&(cod1[in1].b!=1)&&(x[cod1[in1].a+1][cod1[in1].b-1]!='r'))
		{
		cod1[++sf1].a=cod1[in1].a+1;
		cod1[sf1].b=cod1[in1].b-1;
		y[cod1[sf1].a][cod1[sf1].b]=y[cod1[in1].a][cod1[in1].b]+1;
		x[cod1[in1].a+1][cod1[in1].b-1]='r';
		}
	 if ((x[cod1[in1].a-1][cod1[in1].b+1]!='X')&&(cod1[in1].a!=1)&&(cod1[in1].b!=n)&&(x[cod1[in1].a-1][cod1[in1].b+1]!='r'))
		{
		cod1[++sf1].a=cod1[in1].a-1;
		cod1[sf1].b=cod1[in1].b+1;
		y[cod1[sf1].a][cod1[sf1].b]=y[cod1[in1].a][cod1[in1].b]+1;
		x[cod1[in1].a-1][cod1[in1].b+1]='r';
		}

	 if ((x[cod1[in1].a][cod1[in1].b+1]!='X')&&(cod1[in1].b!=n)&&(x[cod1[in1].a][cod1[in1].b+1]!='r'))
		{
		cod1[++sf1].a=cod1[in1].a;
		cod1[sf1].b=cod1[in1].b+1;
		y[cod1[sf1].a][cod1[sf1].b]=y[cod1[in1].a][cod1[in1].b]+1;
		x[cod1[in1].a][cod1[in1].b+1]='r';
		}
	 if ((x[cod1[in1].a-1][cod1[in1].b]!='X')&&(cod1[in1].a!=1)&&(x[cod1[in1].a-1][cod1[in1].b]!='r'))
		{
		cod1[++sf1].a=cod1[in1].a-1;
		cod1[sf1].b=cod1[in1].b;
		y[cod1[sf1].a][cod1[sf1].b]=y[cod1[in1].a][cod1[in1].b]+1;
		x[cod1[in1].a-1][cod1[in1].b]='r';
		}
	 if ((x[cod1[in1].a][cod1[in1].b-1]!='X')&&(cod1[in1].b!=1)&&(x[cod1[in1].a][cod1[in1].b-1]!='r'))
		{
		cod1[++sf1].a=cod1[in1].a;
		cod1[sf1].b=cod1[in1].b-1;
		y[cod1[sf1].a][cod1[sf1].b]=y[cod1[in1].a][cod1[in1].b]+1;
		x[cod1[in1].a][cod1[in1].b-1]='r';
		}
	in1++;

	}
x[JI][JJ]='j';
cod1[1].a=JI;
cod1[1].b=JJ;
while (in2<=sf2)

	{
	 if ((x[cod1[in2].a+1][cod1[in2].b]!='X')&&(cod1[in2].a!=m)&&(x[cod1[in2].a+1][cod1[in2].b]!='j'))
		{
		cod1[++sf2].a=cod1[in2].a+1;
		cod1[sf2].b=cod1[in2].b;
		z[cod1[sf2].a][cod1[sf2].b]=z[cod1[in2].a][cod1[in2].b]+1;
		x[cod1[in2].a+1][cod1[in2].b]='j';
		}
	 if ((x[cod1[in2].a+1][cod1[in2].b+1]!='X')&&(cod1[in2].a!=m)&&(cod1[in2].b!=n)&&(x[cod1[in2].a+1][cod1[in2].b+1]!='j'))
		{
		cod1[++sf2].a=cod1[in2].a+1;
		cod1[sf2].b=cod1[in2].b+1;
		z[cod1[sf2].a][cod1[sf2].b]=z[cod1[in2].a][cod1[in2].b]+1;
		x[cod1[in2].a+1][cod1[in2].b+1]='j';
		}
	 if ((x[cod1[in2].a-1][cod1[in2].b-1]!='X')&&(cod1[in2].a!=1)&&(cod1[in2].b!=1)&&(x[cod1[in2].a-1][cod1[in2].b-1]!='j'))
		{
		cod1[++sf2].a=cod1[in2].a-1;
		cod1[sf2].b=cod1[in2].b-1;
		z[cod1[sf2].a][cod1[sf2].b]=z[cod1[in2].a][cod1[in2].b]+1;
		x[cod1[in2].a-1][cod1[in2].b-1]='j';
		}
	 if ((x[cod1[in2].a+1][cod1[in2].b-1]!='X')&&(cod1[in2].a!=m)&&(cod1[in2].b!=1)&&(x[cod1[in2].a+1][cod1[in2].b-1]!='j'))
		{
		cod1[++sf2].a=cod1[in2].a+1;
		cod1[sf2].b=cod1[in2].b-1;
		z[cod1[sf2].a][cod1[sf2].b]=z[cod1[in2].a][cod1[in2].b]+1;
		x[cod1[in2].a+1][cod1[in2].b-1]='j';
		}
	 if ((x[cod1[in2].a-1][cod1[in2].b+1]!='X')&&(cod1[in2].a!=1)&&(cod1[in2].b!=n)&&(x[cod1[in2].a-1][cod1[in2].b+1]!='j'))
		{
		cod1[++sf2].a=cod1[in2].a-1;
		cod1[sf2].b=cod1[in2].b+1;
		z[cod1[sf2].a][cod1[sf2].b]=z[cod1[in2].a][cod1[in2].b]+1;
		x[cod1[in2].a-1][cod1[in2].b+1]='j';
		}

	 if ((x[cod1[in2].a][cod1[in2].b+1]!='X')&&(cod1[in2].b!=n)&&(x[cod1[in2].a][cod1[in2].b+1]!='j'))
		{
		cod1[++sf2].a=cod1[in2].a;
		cod1[sf2].b=cod1[in2].b+1;
		z[cod1[sf2].a][cod1[sf2].b]=z[cod1[in2].a][cod1[in2].b]+1;
		x[cod1[in2].a][cod1[in2].b+1]='j';
		}
	 if ((x[cod1[in2].a-1][cod1[in2].b]!='X')&&(cod1[in2].a!=1)&&(x[cod1[in2].a-1][cod1[in2].b]!='j'))
		{
		cod1[++sf2].a=cod1[in2].a-1;
		cod1[sf2].b=cod1[in2].b;
		z[cod1[sf2].a][cod1[sf2].b]=z[cod1[in2].a][cod1[in2].b]+1;
		x[cod1[in2].a-1][cod1[in2].b]='j';
		}
	 if ((x[cod1[in2].a][cod1[in2].b-1]!='X')&&(cod1[in2].b!=1)&&(x[cod1[in2].a][cod1[in2].b-1]!='j'))
		{
		cod1[++sf2].a=cod1[in2].a;
		cod1[sf2].b=cod1[in2].b-1;
		z[cod1[sf2].a][cod1[sf2].b]=z[cod1[in2].a][cod1[in2].b]+1;
		x[cod1[in2].a][cod1[in2].b-1]='j';
		}
	in2++;

	}
for (i=1;i<=m;i++)
	for (j=1;j<=n;j++)
		{
		if ((y[i][j]==z[i][j])&&(min==y[i][j])&&(y[i][j]>0))
			{
			if (poz1>i)
				{
				poz1=i;
				poz2=j;
				}
			if (poz1==i)
				{
				if (poz2>j)
					{
					poz2=j;
					}
				}
                        }
		if ((y[i][j]==z[i][j])&&(min>y[i][j])&&(y[i][j]>0))
			{
			poz1=i;
			poz2=j;
			min=y[i][j];
			}

		}
fprintf(g,"%d %d %d\n",min+1,poz1,poz2);
return 0;
}