Cod sursa(job #695259)

Utilizator feel.good1802Andrei F. feel.good1802 Data 28 februarie 2012 11:30:52
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 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[1000];
int n,m,xr,yr,xj,yj,inc,sf,i,j,r[105][105],ju[105][105];
char b[102];
void citire()
{
	fin>>n>>m;
	fin.get();
	for(i=1;i<=n;i++)
		{
			fin.getline(b,100);
			for(int k=0;k<m;k++)
			{
			if(b[k]=='X') {ju[i][k+1]=-1;r[i][k+1]=-1;}
			if(b[k]=='R') {xr=i;yr=k+1;}
			if(b[k]=='J') {xj=i;yj=k+1;}
			}
		}
}

int corectj(int li,int co)
{ return li>=1 && li<=n && co>=1 && co<=m && ju[li][co]==0; }

int corectr(int li,int co)
{ return li>=1 && li<=n && co>=1 && co<=m && r[li][co]==0; }

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

void romeo()
{
	inc=1;
	r[xr][yr]=1;
	adaug(xr,yr);
  while(inc<=sf)
       { for(int i=0;i<8;i++)
            if(corectr(c[inc].lin+o[i],c[inc].col+v[i]))
              { r[c[inc].lin+o[i]][c[inc].col+v[i]]=r[c[inc].lin][c[inc].col]+1;
                adaug(c[inc].lin+o[i],c[inc].col+v[i]); }
         inc++; }
}

void julieta()
{
  ju[xj][yj]=1;
  inc=1;
  sf=0;
  adaug(xj,yj);
  while(inc<=sf)
       { for(int i=0;i<8;i++)
            if(corectj(c[inc].lin+o[i],c[inc].col+v[i]))
              { ju[c[inc].lin+o[i]][c[inc].col+v[i]]=ju[c[inc].lin][c[inc].col]+1;
                adaug(c[inc].lin+o[i],c[inc].col+v[i]); }
         inc++; }
}

void afisare()
{
	int Min=99999999,Mini,Minj;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(r[i][j]==ju[i][j] && r[i][j]>0) if(r[i][j]<Min) {Min=r[i][j];Mini=i;Minj=j;}
			fout<<Min<<" "<<Mini<<" "<<Minj;
}

int main()
{
	citire();
	romeo();
	julieta();
	afisare();
	return 0;
}