Cod sursa(job #904709)

Utilizator ionut_ungureanuUngureanu Vladut Ionut ionut_ungureanu Data 4 martie 2013 19:44:20
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include<fstream>
#define FIN "rj.in"
#define FOUT "rj.out"
#define DimMax 102
#define DimMaxCoada 10404

using namespace std;

ifstream fin(FIN);
ofstream fout(FOUT);

void read();
void solve(int lr,int cr,int aa[DimMax][DimMax]);
void write();

int n,m,i,j,lr,cr,lj,cj,k,minim,lin,col;
int dx[]={0, 1, 0, -1, -1, 1, -1, 1},dy[]={1, 0, -1, 0, -1, 1,  1,-1};
char a[DimMax][DimMax],c;
int R[DimMax][DimMax],J[DimMax][DimMax];


int main()
{
read();
solve(lr,cr,R);
solve(lj,cj,J);
write();
fout.close();
return 0;
}

void read()
{
fin>>n>>m;
fin.get(c);
for(i=1;i<=n;i++)
	 {
	 for(j=1;j<=m;j++)
		 {
		 fin.get(a[i][j]);
		 if(a[i][j]=='R')
			 lr=i,cr=j;
		 else if(a[i][j]=='J')
			 lj=i,cj=j;
		 }
	 fin.get(c);
	 }
for(i=0;i<=n+1;i++)
	 a[i][0]=a[i][m+1]='X';
for(i=0;i<=m+1;i++)
	 a[0][i]=a[n+1][i]='X';
a[lj][cj]=a[lr][cr]=' ';
}

void solve(int ll,int cc,int aa[DimMax][DimMax])
{
struct Lee
	 {
	 int l,c;
	 unsigned d;
	 }C[DimMaxCoada],x,y;
int inc=0,sf=0;

for(i=0;i<=n+1;i++)
	for(j=0;j<=m+1;j++)
		aa[i][j]=-1;
x.l=ll;
x.c=cc;
x.d=1;
aa[ll][cc]=1;
C[inc]=x;
while(inc<=sf)
	 {
	  x=C[inc++];
	  for(k=0;k<8;k++)
		  {
		   y.l=x.l+dx[k];
		   y.c=x.c+dy[k];
		   if(a[y.l][y.c]==' '&&aa[y.l][y.c]==-1)
			   {
			    y.d=x.d+1;
				aa[y.l][y.c]=y.d;
				C[++sf]=y;
			   }
		  }
	 }
}

void write()
{
minim=9999;
for(i=1;i<=n;i++)
	for(j=1;j<=m;j++)
		if(R[i][j]==J[i][j])
			if(R[i][j]<minim&&R[i][j]!=-1)
				minim=R[i][j],lin=i,col=j;
fout<<minim<<' '<<lin<<' '<<col;
}