Cod sursa(job #222750)

Utilizator gabor_oliviu1991gaboru corupt gabor_oliviu1991 Data 24 noiembrie 2008 22:11:43
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<fstream.h>

int tr[102][102],tj[102][102],x[10]={0,-1,-1,0,1,1,1,0,-1},y[10]={0,0,1,1,1,0,-1,-1,-1};
char a[102][102];
int si,sj,min=32000,n,m,i,j;

void traseu(int t[102][102]);

int main()
{
	ifstream f("rj.in");
	ofstream g("rj.out");

	char aux[102];

	f>>n>>m;
	for(i=1;i<=n;i++)
	{
		f.get();
		f.get(aux,101);
		for(j=0;j<m;j++)
			{
				a[i][j+1]=aux[j];
				if(aux[j]=='R')
					tr[i][j+1]=1;
				if(aux[j]=='J')
					tj[i][j+1]=1;
			}
	}

	for(i=0;i<=n+1;i++)
		a[i][0]='X',a[m+1][i]='X';
	for(i=0;i<=m+1;i++)
		a[0][i]='X',a[n+1][i]='X';

	traseu(tr);
	traseu(tj);
	min=32000;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(tr[i][j]==tj[i][j]&&tr[i][j]!=0&&tr[i][j]==min&&si<sj)
				{  si=i;sj=j;min=tr[i][j];	}
			else
			if(tr[i][j]==tj[i][j]&&tr[i][j]!=0&&tr[i][j]<min)
				{  si=i;sj=j;min=tr[i][j];	}

	g<<min<<" "<<si<<" "<<sj;

return 0;
}


void traseu(int t[102][102])
{

int i,j,ii,jj,min,ok=0;

while(ok!=1)
{
	ok=1;
	for(i=1;i<=n;i++)
	     for(j=1;j<=m;j++)

		if(a[i][j]==' '&&t[i][j]==0)
		   {
			min=32000;

			for(int k=1;k<=8;k++)
			{
				ii=i+x[k];
				jj=j+y[k];
				if(t[ii][jj]<min&&t[ii][jj]>0)
					min=t[ii][jj];
			}
			if(min<32000)
				{t[i][j]=min+1;ok=0;}
		   }
}
}