Cod sursa(job #563541)

Utilizator gabriel93Robu Gabriel gabriel93 Data 25 martie 2011 13:23:12
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.95 kb
#include<fstream>
#include<string.h>
using namespace std;
fstream f1,f2;
int i,j,n,m;
char a[101][102],x[102];
int main()
{
int x1,x2,y1,y2,lr1[1000],cr1[1000],lr2[1000],cr2[1000],k,nr1,nr2,q,xx1,yy1,b[101][101],ok,xx2,yy2;
int lj1[1000],cj1[1000],lj2[1000],cj2[1000],xx3,yy3,nj1,nj2,lmin,cmin,lrj[1000],crj[1000];
int dl[8]={-1,-1,0,+1,+1,+1,0,-1};
int dc[8]={0,+1,+1,+1,0,-1,-1,-1};
f1.open("rj.in",ios::in);
f2.open("rj.out",ios::out);
f1>>n>>m;
f1.get();
for(i=1;i<=n;i++)
{
	f1.get(x,m+1,'\n');
	f1.get();
	strcpy(a[i]," ");
	strcat(a[i],x);
}
x1=x2=y1=y2=xx1=xx2=yy1=yy2=xx3=yy3=0;
for(i=1;i<=n;i++)
	for(j=1;j<=m;j++)
	{
		if(a[i][j]=='R')
		{
			x1=i;
			y1=j;
			b[i][j]=1;
		}
		if(a[i][j]=='J')
		{
			x2=i;
			y2=j;
			b[i][j]=0;
		}
		if(a[i][j]==' ')
			b[i][j]=0;
		if(a[i][j]=='X')
			b[i][j]=-1;
	}
k=1;
lr1[1]=x1;
cr1[1]=y1;
lj1[1]=x2;
cj1[1]=y2;
nr1=1;
nj1=1;
q=0;
while(!q)
{
	nr2=0;
	nj2=0;
	for(i=1;i<=nr1;i++)
		for(j=0;j<=7;j++)
		{
			xx1=lr1[i]+dl[j];
			yy1=cr1[i]+dc[j];
			if(xx1>0&&xx1<=n&&yy1>0&&yy1<=m)
				if(b[xx1][yy1]==0)
				{
					b[xx1][yy1]=2;
					nr2++;
					lr2[nr2]=xx1;
					cr2[nr2]=yy1;
				}
		}
	for(i=1;i<=nj1;i++)
		for(j=0;j<=7;j++)
		{
			xx2=lj1[i]+dl[j];
			yy2=cj1[i]+dc[j];
			if(xx2>0&&xx2<=n&&yy2>0&&yy2<=m)
				if(b[xx2][yy2]==0)
				{
					b[xx2][yy2]=3;
					nj2++;
					lj2[nj2]=xx2;
					cj2[nj2]=yy2;
				}
				else if (b[xx2][yy2]==2)
				{
					q++;
					lrj[q]=xx2;
					crj[q]=yy2;
					b[xx2][yy2]=5;
				}
				
		}
	k++;
	nr1=nr2;
	nj1=nj2;
	for(i=1;i<=nr1;i++)
	{
		lr1[i]=lr2[i];
		cr1[i]=cr2[i];
		b[lr1[i]][cr1[i]]=1;
	}
	for(i=1;i<=nj1;i++)
	{
		lj1[i]=lj2[i];
		cj1[i]=cj2[i];
		b[lj1[i]][cj1[i]]=4;
	}
}
ok=k;
lmin=n+1;
cmin=m+1;
for (i=1;i<=q;i++)
	if ((lrj[i]<lmin) || (lrj[i]==lmin && crj[i]<cmin))
	{
		lmin=lrj[i]; cmin=crj[i];
	}
f2<<ok<<" "<<lmin<<" "<<cmin;
f1.close();
f2.close();
return 0;
}