Cod sursa(job #498984)

Utilizator valizZbant Valentin valiz Data 7 noiembrie 2010 23:50:54
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#include<fstream>

using namespace std ;

int RO[102][102], JU[102][102];
int n, m, i, j, lR, cR, lJ, cJ, ic, sc, lnou, cnou, dnou, tmin, aicix, aiciy;
char ch;

ifstream fin ("rj.in");
ofstream fout ("rj.out");

struct elem
{
	int l, c, d;
}C[10000], x, y;

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

int main()

{
	fin>>n>>m;
	
	for (i=0; i<=n+1; i++)
		RO[i][0]=RO[i][m+1]=JU[i][0]=JU[i][m+1]=-1;
	for (j=1; j<=m; j++)
		RO[0][j]=RO[n+1][j]=JU[0][j]=JU[n+1][j]=-1;
	
	fin.get(ch);
	for (i=1; i<=n; i++)
	{
		for (j=1; j<=m; j++)
		{
			fin.get(ch);
			if (ch=='X')
				RO[i][j]=JU[i][j]=-1;
				else
					if (ch==' ')
						RO[i][j]=JU[i][j]=0;
						else
							if (ch=='R')
							{
								lR=i;
								cR=j;
								RO[i][j]=1;
								JU[i][j]=0;
							}	
								else 
								{
									lJ=i;
									cJ=j;
									RO[i][j]=0;
									JU[i][j]=1;
								}	
        }
		fin.get(ch);
	}
	ic=0;
	sc=0;
	C[sc].l=lR;
	C[sc].c=cR;
	C[sc].d=RO[lR][cR];
	while (ic<=sc)
	{
		x=C[ic++];
		for (i=0; i<8; i++)
		{
			lnou=x.l+dx[i];
			cnou=x.c+dy[i];
			if (RO[lnou][cnou]==0)
			{
				dnou=x.d+1;
				RO[lnou][cnou]=dnou;
				sc++;
				C[sc].l=lnou;
				C[sc].c=cnou;
				C[sc].d=dnou;
			}
		}
	}
	
	ic=0;
	sc=0;
	C[sc].l=lJ;
	C[sc].c=cJ;
	C[sc].d=JU[lJ][cJ];
	while (ic<=sc)
	{
		x=C[ic++];
		for (i=0; i<8; i++)
		{
			lnou=x.l+dx[i];
			cnou=x.c+dy[i];
			if (JU[lnou][cnou]==0)
			{
				dnou=x.d+1;
				JU[lnou][cnou]=dnou;
				sc++;
				C[sc].l=lnou;
				C[sc].c=cnou;
				C[sc].d=dnou;
			}
		}
	}
	tmin=100000;
    for(i=1; i<=n; i++)
		for (j=1; j<=m; j++)
			if ((RO[i][j]==JU[i][j]) && RO[i][j]!=-1 && RO[i][j]!=0)
				if (RO[i][j]<tmin)
				{
					tmin=RO[i][j];
					aicix=i;
					aiciy=j;
				}
	fout<<tmin<<' '<<aicix<<' '<<aiciy;
	
    fout.close();
	return 0;
}