Cod sursa(job #695270)

Utilizator andreyeneEne Andrey andreyene Data 28 februarie 2012 11:34:45
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include<fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int o[8]={-1,-1,1,0,0,1,1,-1};
int v[8]={-1,0,1,-1,1,-1,0,1};
struct coada { int lin,col; } c[10001];
int rom[101][101],jul[101][101],i,j,ij,jj,ir,jr,inc,sf,m,n;
char x[101];
void citire()
{
	fin>>n>>m;fin.get();
	for(i=1;i<=n;i++)
	{	
		fin.getline(x,101);
		for(j=0;j<m;j++)
		{
			if(x[j]=='X') rom[i][j+1]=jul[i][j+1]=-1;
			if(x[j]=='R') {ir=i;jr=j+1;}
			if(x[j]=='J') {ij=i;jj=j+1;}
		}
	}
}
int corectr(int li,int co)
{
	return li>=1 && li<=n && co>=1 && co<=m && rom[li][co]==0;
}
int corectj(int li,int co)
{
	return li>=1 && li<=n && co>=1 && co<=m && jul[li][co]==0;
}

void adaug(int x,int y)
{
	sf++;
	c[sf].lin=x;
	c[sf].col=y;
}

void romeo()
{
	rom[ir][jr]=1;
	inc=1;sf=0;
	adaug(ir,jr);
	while(inc<=sf)
	{
		for(i=0;i<8;i++)
			if(corectr(c[inc].lin+o[i],c[inc].col+v[i]))
			{
				rom[c[inc].lin+o[i]][c[inc].col+v[i]]=rom[c[inc].lin][c[inc].col]+1;
				adaug(c[inc].lin+o[i],c[inc].col+v[i]);
			}
		inc++;
	}
}
void julieta()
{
	jul[ij][jj]=1;
	inc=1;sf=0;
	adaug(ij,jj);
	while(inc<=sf)
	{
		for(i=0;i<8;i++)
			if(corectj(c[inc].lin+o[i],c[inc].col+v[i]))
			{
				jul[c[inc].lin+o[i]][c[inc].col+v[i]]=jul[c[inc].lin][c[inc].col]+1;
				adaug(c[inc].lin+o[i],c[inc].col+v[i]);
			}
		inc++;
	}
}
void afisare()
{
	int Mx=999999999,mxi,mxj;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(rom[i][j]==jul[i][j] && rom[i][j]>0) if(rom[i][j]<Mx) {Mx=rom[i][j];mxi=i;mxj=j;}
	fout<<Mx<<' '<<mxi<<' '<<mxj;
}
int main()
{
	citire();
	romeo();
	julieta();
	afisare();
	return 0;
	fin.close();
	fout.close();
}