Cod sursa(job #695103)

Utilizator andreyeneEne Andrey andreyene Data 28 februarie 2012 10:30:36
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <iostream.h>
#include <fstream.h>
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 mat[100][100],n,m,xr,yr,xj,yj,inc,sf,mat_r[101][101],mat_j[101][101],l,i,j,x;
char a[1000];

void citire()
{ 
  fin>>n>>m;
  fin.get();
  for(i=1;i<=n;i++)
  {
	fin.getline(a,101);
	for(x=0;x<m;x++)
	{
		if(a[x]=='X') mat_r[i][x+1]=mat_j[i][x+1]=-1;
		if(a[x]=='R') {xr=i;yr=x+1;}
		if(a[x]=='J') {xj=i;yj=x+1;}
	}
  }
  fin.close(); 
}

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

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

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

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

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

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

void afisare()
{
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if((mat_r[i][j]==mat_j[i][j]) && (mat_r[i][j]>=0 )) fout<<i<<" "<<j<<" "<<mat_r[i][j];
}

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