Cod sursa(job #686923)

Utilizator tanduraDomnita Dan tandura Data 21 februarie 2012 22:38:47
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.02 kb
#include<fstream>
#include<iomanip>
using namespace std;

int romt[110][110],jult[110][110];
char harta[110][110];
struct {int i; int j; int t;} x[1000],aux;
struct {int ii; int jj;} C[1000],aux1;
int n,m;
int xi[]={-1, 0, 1, 0,-1,-1, 1, 1};
int xj[]={ 0, 1, 0,-1,-1, 1, 1,-1};

void read_data()
{int i;
ifstream g("rj.in");
g>>n>>m;
g.getline(harta[0],m+1);
for(i=0;i<n;i++)
	g.getline(harta[i],m+1);
g.close();
}

int check(int a,int b)
{int v;
	if((a>=0)&&(b>=0)&&(a<n)&&(b<m)&&(harta[a][b]==' '))
		v=1;
	else
		v=0;
return v;
}

void solution()
{int i,j,ok,k,ii,jj;
 int inc,sf;
 inc=sf=0; ok=0;
 for(i=0;((i<n)&&(ok==0));i++)
	 for(j=0;((j<m)&&(ok==0));j++)
		 if(harta[i][j]=='R')
			 ok=1;
 romt[i-1][j-1]=1;
 C[inc].ii=i-1;
 C[inc].jj=j-1;
 while(inc<=sf)
      {aux1=C[inc++];
	   for(k=0;k<8;k++)
	      {ii=aux1.ii+xi[k];
	       jj=aux1.jj+xj[k];
		   if(check(ii,jj)==1)
			   if(romt[ii][jj]==0)
				{romt[ii][jj]=romt[aux1.ii][aux1.jj]+1;
			     sf++;
				 C[sf].ii=ii;
				 C[sf].jj=jj;
				}
		  }
	  }
 inc=sf=0; ok=0;
 for(i=0;((i<n)&&(ok==0));i++)
	 for(j=0;((j<m)&&(ok==0));j++)
		 if(harta[i][j]=='J')
			 ok=1;
 jult[i-1][j-1]=1;
 C[inc].ii=i-1;
 C[inc].jj=j-1;
 while(inc<=sf)
      {aux1=C[inc++];
	   for(k=0;k<8;k++)
	      {ii=aux1.ii+xi[k];
	       jj=aux1.jj+xj[k];
		   if(check(ii,jj)==1)
			  if(jult[ii][jj]==0)
				{jult[ii][jj]=jult[aux1.ii][aux1.jj]+1;
			     sf++;
				 C[sf].ii=ii;
				 C[sf].jj=jj;
				}
		  }
	  }
 k=-1;
 for(i=0;i<n;i++)
	 for(j=0;j<n;j++)
		 if((romt[i][j]==jult[i][j])&&(romt[i][j]!=0))
		   {k++;
		    x[k].i=i;
			x[k].j=j;
			x[k].t=romt[i][j];}
 aux=x[0];
 for(i=1;i<=k;i++)
	{if(aux.t>x[i].t)
		 aux=x[i];
	 if((aux.t==x[i].t)&&(aux.i>x[i].i))
		 aux=x[i];
	 if((aux.t==x[i].t)&&(aux.i==x[i].i)&&(aux.j>x[i].j))
		 aux=x[i];
	}
 
}

void display()
{ofstream t("rj.out");
t<<aux.t<<" "<<aux.i+1<<" "<<aux.j+1;
t.close();
}

int main()
{
read_data();
solution();
display();
return 0;
}