Cod sursa(job #347743)

Utilizator bugyBogdan Vlad bugy Data 13 septembrie 2009 12:12:29
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.96 kb
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define dim 102
#define dim2 10100
short int n,m,i,j,x1,x2,y1,y2,mat[dim][dim],t,x,y,yy,a[dim2],b[dim2],c[dim2],d[dim2];
short int dir1[9]={0,-1,-1,0,1,1,1,0,-1};
short int dir2[9]={0,0,1,1,1,0,-1,-1,-1};
char cc,mat2[dim][dim];



int main()
{
FILE *f=fopen("rj.in","r"), *g=fopen("rj.out","w");
fscanf(f,"%hd%hd\n",&n,&m);

for(i=1;i<=n;i++)
	{for(j=1;j<=m;j++)
		{fscanf(f,"%c",&cc);
		if(cc=='R') {x1=i;y1=j;}
		if(cc=='J') {x2=i;y2=j;}
		if(cc=='X') mat[i][j]=-1;
		}
	fscanf(f,"\n");
	}
t=2;
x=1; y=1;yy=1;
mat[x1][y1]=-1;
mat[x2][y2]=-1;
a[1]=x1;	c[1]=x2;
b[1]=y1;	d[1]=y2;
int ok=1,s,ss,e,ee;
	while(ok)
	{
		//romeo
		s=x; ss=y; e=x;
while(s<=ss)
{
	for(i=1;i<=8;i++)
			if(mat2[ x1+ dir1[i] ][ y1 + dir2[i] ]=='j')
			{
				fprintf(g,"%hd %hd %hd\n",t,x1+dir1[i],y1 + dir2[i]); exit(0);
			//g<<x1+dir1[i]<<" "<<y1 + dir2[i]<<"\n"<<t<<"\n";
			}
			
			else
		{
			if(mat[ x1+ dir1[i] ][  y1+ dir2[i]]==0)
				
				if(( x1+ dir1[i] <=n)&&( y1+ dir2[i] <=m)&&( x1+ dir1[i] >0)&&( y1+ dir2[i] >0)  )
				{
					mat[ x1+ dir1[i] ][  y1+ dir2[i]]=t;
					mat2[ x1+ dir1[i] ][  y1+ dir2[i]]='r';
					a[++y]=x1+ dir1[i];
					b[y]=y1+ dir2[i];
				}				
		}		
	s++;
	x1=a[s]; y1=b[s];
}		
		//juieta
		ee=yy;
while(e<=ee)
{
		for(i=1;i<=8;i++)
			if(mat2[ x2+ dir1[i] ][ y2 + dir2[i] ]=='r')
			{
			fprintf(g,"%hd %hd %hd\n",t,x2+dir1[i],y2 + dir2[i]); exit(0);
			//g<<x2+ dir1[i]<<" "<<y2 + dir2[i]<<"\n"<<t<<"\n";
			}
			
			else
		{
			if(mat[ x2+ dir1[i] ][  y2+ dir2[i]]==0)
				
				if(( x2+ dir1[i] <=n)&&( y2+ dir2[i] <=m)&&( x2+ dir1[i] >0)&&( y2+ dir2[i] >0) )
				{
					mat[ x2+ dir1[i] ][  y2+ dir2[i]]=t;
					mat2[ x2+ dir1[i] ][  y2+ dir2[i]]='j';
					c[++yy]=x2+ dir1[i];
					d[yy]=y2+ dir2[i];
				}					
		}	
e++;
x2=c[e]; y2=d[e];
}
		t++;
		x++;	
	x1=a[s]; y1=b[s];
	x2=c[e]; y2=d[e];
	}
	
fclose(f);
fclose(g);

return 0;}