Cod sursa(job #366807)

Utilizator bugyBogdan Vlad bugy Data 22 noiembrie 2009 10:52:36
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include<stdio.h>
using namespace std;
#define dim 105
#define dim2 10010
#include<stdlib.h>
#include<string.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,x,y,h,ok;
char p,mat[dim][dim];
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};



int cautaj(int ii, int jj,int k)
{
	j=jj;
for(i=ii;i<=j;i++)
{	a=l[i]; b=c[i];
	for(h=1;h<=8;h++)
	{	x=a+dir1[h];	y=b+dir2[h];
		if(mat[x][y]=='J')
				{t=(k+1)/2;	return 0;}	
		else if(romeo[x][y]==0&&mat[x][y]==' '&&x>=0&&y>=0&&x<=n&&y<=m)
			{romeo[x][y]=k;	l[++jj]=x; c[jj]=y;}
	}
	
}
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];
	for(h=1;h<=8;h++)
	{	x=a+dir1[h];	y=b+dir2[h];
		if(mat[x][y]=='R')
				{t=(k+1)/2;	return 0;}	
		else if(julieta[x][y]==0&&mat[x][y]==' '&&x>=0&&y>=0&&x<=n&&y<=m)
			{julieta[x][y]=k;	l[++jj]=x; c[jj]=y;}
	}
	
}
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=0;i<n;i++)
	//fscanf(f,"%s",&mat[i]);
	fgets(mat[i],dim,f);
for(i=0;i<n;i++)
	for(j=0;j<m;j++)
		if(ok==2) {i=n; break;}
		else if(mat[i][j]=='R') {x1=i;y1=j;ok++;}
		else if(mat[i][j]=='J') {x2=i;y2=j;ok++;}
ii=0; jj=0;
l[0]=x1;
c[0]=y1;

cautaj(0,0,1);

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


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


return 0;}