Cod sursa(job #563483)

Utilizator gabriel93Robu Gabriel gabriel93 Data 25 martie 2011 11:51:52
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 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,l1[10000],c1[10000],l2[10000],c2[10000],k,n1,n2,q,xx1,yy1,b[101][101],ok,xx2,yy2;
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);
}
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;
l1[1]=x1;
c1[1]=y1;
n1=1;
q=1;
while(q)
{
	n2=0;
	for(i=1;i<=n1;i++)
		for(j=0;j<=7;j++)
		{
			xx1=l1[i]+dl[j];
			yy1=c1[i]+dc[j];
			if(xx1>0&&xx1<=n&&yy1>0&&yy1<=m)
				if(b[xx1][yy1]==0)
				{
					b[xx1][yy1]=k+1;
					n2++;
					l2[n2]=xx1;
					c2[n2]=yy1;
				}
				if(xx1==x2&&yy1==y2)
				{
					q=0;
				}
			
		}
	k++;
	n1=n2;
	for(i=1;i<=n1;i++)
	{
		l1[i]=l2[i];
		c1[i]=c2[i];
	}
}
if(k%2==0)
	ok=k/2;
else
	ok=(k+1)/2;
for(i=n;i>0;i--)
	for(j=m;j>0;j--)
		if(b[i][j]==ok)
		{
			xx2=i;
			yy2=j;
		}
f2<<ok<<" "<<xx2<<" "<<yy2;
f1.close();
f2.close();
return 0;
}