Cod sursa(job #332429)

Utilizator udrescu_cristiUdrescu Cristian udrescu_cristi Data 17 iulie 2009 19:07:42
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include<iostream.h>
#include<stdio.h>
 int main()
{
 freopen("rj.in","r",stdin);
 freopen("rj.out","w",stdout);
  long n,m,i,j;
  char a[100][100],b[100][100];
 long d1[100][100],d[100][100];
   long k,t=1,dl[10],dc[10],lv,cv,x,x1,x2,y1,y2;
 scanf("%ld %ld\n",&n,&m);
  for(i=1;i<=n;i++)
   {
   for(j=1;j<=m+1;j++)
{
scanf("%c",&a[i][j]);
b[i][j]=a[i][j];
if(a[i][j]=='R') { x1=i; y1=j;}
if(a[i][j]=='J') { x2=i; y2=j;}
d[i][j]=0;
d1[i][j]=0;
}
}
 dl[1]=0;    dc[1]=1;
 dl[2]=1;    dc[2]=0;
 dl[3]=0;    dc[3]=-1;
 dl[4]=-1;   dc[4]=0;
 dl[5]=-1;   dc[5]=-1;
 dl[6]=1;    dc[6]=1;
 dl[7]=-1;   dc[7]=1;
 dl[8]=1;    dc[8]=-1;
for(j=0 ; j<=m+1 ;j++)
  {
   a[0][j]='-1';
   a[n+1][j]='-1';
  b[0][j]='-1';
   b[n+1][j]='-1';
}
  for(i=0 ; i<=n+1 ;i++)
  {
   a[i][0]='-1';
   a[i][m+1]='-1';
   b[i][0]='-1';
   b[i][m+1]='-1';
}
k=1;
   d[x1][y1]=k;
    do
     {
      t=0;
      for(i=1 ;i<=n ;i++)
       for(j=1 ; j<=m ; j++)
       {
	if(d[i][j]==k){
		       for(x=1 ;x<=8 ; x++)
		       {
			lv=i+dl[x];
			cv=j+dc[x];
			 if((d[lv][cv]==0)&&(a[lv][cv]==' '||a[lv][cv]=='J'))
			 {
			  d[lv][cv]=k+1;
			   t=1;
			   }
			    }
			     }
			      }
       if(t) k=k+1;

	}
	while(t);
k=1;
t=1;
   d1[x2][y2]=k;
    do
     {
      t=0;
      for(i=1 ;i<=n ;i++)
       for(j=1 ; j<=m ; j++)
       {
	if(d1[i][j]==k){
		       for(x=1 ;x<=8 ; x++)
		       {
			lv=i+dl[x];
			cv=j+dc[x];
			 if((d1[lv][cv]==0)&&(b[lv][cv]==' '||b[lv][cv]=='R'))
			 {
			  d1[lv][cv]=k+1;
			   t=1;
			   }
			    }
			     }
			      }
       if(t) k=k+1;

	}
	while(t);
	 k=10000;
 for(i=1;i<=n;i++)
  for(j=1;j<=m;j++)
   if(d[i][j]==d1[i][j]&&d[i][j]<k&&d[i][j]!=0) { k=d[i][j]; x1=i; x2=j; }
    printf("%ld %ld %ld\n",k,x1,x2);
return 0;
}