Cod sursa(job #159899)

Utilizator vladbBogolin Vlad vladb Data 14 martie 2008 15:07:08
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include<fstream.h>

ifstream fin("rj.in");
ofstream fout("rj.out");

int di[8]={0,1,0,-1,-1,1,-1,1};
int dj[8]={1,0,-1,0,-1,1,1,-1};
int n,m,xr,yr,xj,yj;
char a[101][101];
struct coada {  int x,y;
	     }  c[10000];

void citire(char a[101][101])
{   int i,j;
    char c;
    fin>>n>>m;
    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';
    fin.get(c);
    for(i=1;i<=n;i++)
    {	for(j=1;j<=m;j++)
	{       fin.get(c);
		a[i][j]=c;
		if(a[i][j]=='R') {   xr=i;
				     yr=j;
				     a[i][j]=' ';
				 }
		   else
			if(a[i][j]=='J') { xj=i;
					   yj=j;
					   a[i][j]=' ';
					 }
	}
	fin.get(c);
    }
}

void lee(int x,int y,int d[101][101])
{  int inc=0,sf=0,i,j;
   coada p;
   for(i=0;i<=n+1;i++)
	for(j=0;j<=m+1;j++)
		d[i][j]=0;
   c[0].x=x;
   c[0].y=y;
   d[x][y]=1;
   while(inc<=sf)
   {	p=c[inc++];
	for(i=0;i<8;i++)
	{   if(a[p.x+di[i]][p.y+dj[i]]==' '&&d[p.x+di[i]][p.y+dj[i]]==0)
	    {	d[p.x+di[i]][p.y+dj[i]]=d[p.x][p.y]+1;
		c[++sf].x=p.x+di[i];
		c[sf].y=p.y+dj[i];
	    }
	}
   }

}

void afis(int r[101][101],int j[101][101])
{   int tmin=101*101+5,xmin=-1,ymin=-1,i,k;
    for(i=1;i<=n;i++)
	for(k=1;k<=m;k++)
		if(r[i][k]==j[i][k])
			if(r[i][k]<tmin&&r[i][k]!=0)
			{	tmin=r[i][k];
				xmin=i;
				ymin=k;
			}
    fout<<tmin<<" "<<xmin<<" "<<ymin<<endl;
}
int main()
{   int r[101][101],j[101][101];
    citire(a);
    lee(xr,yr,r);
    lee(xj,yj,j);
    afis(r,j);
    fin.close();
    fout.close();
    return 0;
}