Cod sursa(job #690617)

Utilizator s8ko14romario s8ko14 Data 25 februarie 2012 19:27:39
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.08 kb
#include<cstdio>
#include<cstring>
using namespace std;
int n,m,p,i,j,linie_r,coloana_r,linie_j,coloana_j,k;
int di[8]={-1,-1,0,1,1, 1, 0,-1};
int dj[8]={ 0, 1,1,1,0,-1,-1,-1};
char a[102][102],b[102][102];
struct drum
{
	int linie;
	int coloana;
	int pasi;
};
drum julieta[10000],romeo[10000];
void citire()
{
	FILE *f=fopen("rj.in","rt");
	fscanf(f,"%i%i",&n,&m);
	fgets(a[0],m,f);
	for(int i=1;i<=n;i++)
		fgets(a[i]+1,101,f);
	fclose(f);
	memcpy(b,a,102*102);
}
void pozitii()//determin pozitiile lui romeo si julieta
{
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(a[i][j]=='R')
			{	linie_r=i;	coloana_r=j;	}
			else
				if(a[i][j]=='J')
				{	linie_j=i;	coloana_j=j;	}
}
void verificare_romeo(int i,int j,int &ultim)//caut pozitii disponibile pt romeo
{
	if(a[i][j]==' ')
	{	
		ultim++;a[i][j]='V';	
		romeo[ultim].linie=i;
		romeo[ultim].coloana=j;
        romeo[ultim].pasi=p+1;		
	}
}
void verificare_julieta(int i,int j,int &ultim)//caut pozitii disponibile pt julieta
{
	if(b[i][j]==' ')
	{	
		ultim++;b[i][j]='v';	
		julieta[ultim].linie=i;
		julieta[ultim].coloana=j;
        julieta[ultim].pasi=p+1;		
	}
}
int main()
{
	int pr,ur,pj,uj,fin;
	citire();
	pozitii();
	//bordare_matrice();
	romeo[0].linie=linie_r;	romeo[0].coloana=coloana_r;	julieta[0].linie=linie_j; julieta[0].coloana=coloana_j;
	pr=0;	ur=0;	pj=0;	uj=0;
	while(pr<=ur)//pt romeo:
	{
		i=romeo[pr].linie;j=romeo[pr].coloana;p=romeo[pr].pasi;
		for(k=0;k<8;k++)
		    verificare_romeo(i+di[k],j+dj[k],ur);
		pr++;
	}
	while(pj<=uj)//pt julieta:
	{
     	i=julieta[pj].linie;j=julieta[pj].coloana;p=julieta[pj].pasi;
		for(k=0;k<8;k++)
		    verificare_julieta(i+di[k],j+dj[k],uj);
		pj++;
	}
	k=1;fin=0;
	do {
	  for(i=1;i<=ur;i++)
		for(j=1;j<=uj;j++)
			if(romeo[i].pasi==k && julieta[j].pasi==k &&
				romeo[i].linie==julieta[j].linie && romeo[i].coloana==julieta[j].coloana)
				fin=i;
	  k++;
	}while(!fin && k<=romeo[ur].pasi);
	FILE *g=fopen("rj.out","wt");
	fprintf(g,"%i %i %i",romeo[fin].pasi+1,romeo[fin].linie,romeo[fin].coloana);
	fclose(g);
}