Cod sursa(job #366184)

Utilizator bugyBogdan Vlad bugy Data 21 noiembrie 2009 09:59:59
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.18 kb
#include<stdio.h>
using namespace std;
#define dim 105
#define dim2 10010
#include<stdlib.h>

int romeo[dim][dim],julieta[dim][dim],l[dim2],c[dim2],i,j,n,m,ii,jj,a,b,t,x1,x2,y1,y2;
char x;


int cautaj(int ii, int jj,int k)
{
	j=jj;
for(i=ii;i<=j;i++)
{	a=l[i]; b=c[i];
	//a-1 b
	if(romeo[a-1][b]==-2)
		{t=k/2+1;	return 0;}
	else if(romeo[a-1][b]==0&&a-1>0)
		{romeo[a-1][b]=k;	l[++jj]=a-1; c[jj]=b;}
		
	//a-1 b+1
	if(romeo[a-1][b+1]==-2)
		{t=k/2+1;	return 0;}
	else if(romeo[a-1][b+1]==0&&a-1>0&&b+1<=m)
		{romeo[a-1][b+1]=k;		l[++jj]=a-1; c[jj]=b+1;}
	
	//a b+1
	if(romeo[a][b+1]==-2)
		{t=k/2+1;	return 0;}
	else if(romeo[a][b+1]==0&&b+1<=m)
		{romeo[a][b+1]=k; 		l[++jj]=a; c[jj]=b+1;}
	
	//a+1 b+1
	if(romeo[a+1][b+1]==-2)
		{t=k/2+1;	return 0;}
	else if(romeo[a+1][b+1]==0&&a+1<=n&&b+1<=m)
		{romeo[a+1][b+1]=k;		l[++jj]=a+1; c[jj]=b+1;}
	
	//a+1 b
	if(romeo[a+1][b]==-2)
		{t=k/2+1;	return 0;}
	else if(romeo[a+1][b]==0&&a+1<=n)
		{romeo[a+1][b]=k;		l[++jj]=a+1; c[jj]=b;}
	
	//a b-1
	if(romeo[a][b-1]==-2)
		{t=k/2+1;	return 0;}
	else if(romeo[a][b-1]==0&&b-1>0)
		{romeo[a][b-1]=k;		l[++jj]=a; c[jj]=b-1;}
	
	//a-1 b-1
	if(romeo[a-1][b-1]==-2)
		{t=k/2+1;	return 0;}
	else if(romeo[a-1][b-1]==0&&a-1>0&&b-1>0)
		{romeo[a-1][b-1]=k;		l[++jj]=a-1; c[jj]=b-1;}
}
ii=i;
cautaj(ii,jj,k+1);

}


int cautar(int ii, int jj,int k)
{
	j=jj;
for(i=ii;i<=j;i++)
{	a=l[i]; b=c[i];
	//a-1 b
	if(julieta[a-1][b]==-2)
		{t=k/2+1;	return 0;}
	else if(julieta[a-1][b]==0&&a-1>0)
		{julieta[a-1][b]=k;	l[++jj]=a-1; c[jj]=b;}
		
	//a-1 b+1
	if(julieta[a-1][b+1]==-2)
		{t=k/2+1;	return 0;}
	else if(julieta[a-1][b+1]==0&&a-1>0&&b+1<=m)
		{julieta[a-1][b+1]=k;		l[++jj]=a-1; c[jj]=b+1;}
	
	//a b+1
	if(julieta[a][b+1]==-2)
		{t=k/2+1;	return 0;}
	else if(julieta[a][b+1]==0&&b+1<=m)
		{julieta[a][b+1]=k; 		l[++jj]=a; c[jj]=b+1;}
	
	//a+1 b+1
	if(julieta[a+1][b+1]==-2)
		{t=k/2+1;	return 0;}
	else if(julieta[a+1][b+1]==0&&a+1<=n&&b+1<=m)
		{julieta[a+1][b+1]=k;		l[++jj]=a+1; c[jj]=b+1;}
	
	//a+1 b
	if(julieta[a+1][b]==-2)
		{t=k/2+1;	return 0;}
	else if(julieta[a+1][b]==0&&a+1<=n)
		{julieta[a+1][b]=k;		l[++jj]=a+1; c[jj]=b;}
	
	//a b-1
	if(julieta[a][b-1]==-2)
		{t=k/2+1;	return 0;}
	else if(julieta[a][b-1]==0&&b-1>0)
		{julieta[a][b-1]=k;		l[++jj]=a; c[jj]=b-1;}
	
	//a-1 b-1
	if(julieta[a-1][b-1]==-2)
		{t=k/2+1;	return 0;}
	else if(julieta[a-1][b-1]==0&&a-1>0&&b-1>0)
		{julieta[a-1][b-1]=k;		l[++jj]=a-1; c[jj]=b-1;}
}
ii=j;
cautar(ii,jj,k+1);

}


int main()
{
FILE *f=fopen("rj.in","r"), *g=fopen("rj.out","w");

fscanf(f,"%d%d ",&n,&m);
//citire
for(i=1;i<=n;i++)
	{for(j=1;j<=m;j++)
		{fscanf(f,"%c",&x);
		if(x=='X')
			romeo[i][j]=julieta[i][j]=-1;	
		if(x=='R')
			{x1=i;	y1=j; julieta[i][j]=-2;  romeo[i][j]=-3;}
		else if(x=='J')
			{x2=i;	y2=j; romeo[i][j]=-2;	julieta[i][j]=-3;}		
		}
	fscanf(f," ");
	}
ii=1; jj=1;
l[1]=x1;
c[1]=y1;
cautaj(1,1,1);

ii=1; jj=1;
l[1]=x2;
c[1]=y2;
cautar(1,1,1);

fprintf(g,"%d ",t);


for(i=1;i<=n;i++)
	for(j=1;j<=m;j++)
		if(romeo[i][j]==julieta[i][j]&&romeo[i][j]>0)
			{fprintf(g,"%d %d\n",i,j);
			fclose(f);
			fclose(g);exit(0);}


return 0;}