Cod sursa(job #131712)

Utilizator mircea_infoSuciu Mircea-Gabriel mircea_info Data 4 februarie 2008 13:16:12
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<stdio.h>

int ro[105][105],ju[105][105];
struct coditza {char i,j;};
coditza q[10000];

int main()
{
 int pq,uq,n,i,j,m,ir,jr,ij,jj,nr;
 char wtf[100];
 freopen("rj.in","r",stdin);
 scanf("%d%d\n",&n,&m);
 for(i=1;i<=n;i++)
 {
  gets(wtf);
  for(j=1;j<=m;j++)
     {
      if(wtf[j-1]=='X') ro[i][j]=ju[i][j]=-1;
      else
       {
	ro[i][j]=ju[i][j]=0;
	if(wtf[j-1]=='R') ir=i,jr=j;
	      else if(wtf[j-1]=='J') ij=i,jj=j;
       }
     }
 }
 fclose(stdin);
 q[pq=uq=0].i=ir,q[pq].j=jr;
 ro[ir][jr]=1;
 int di,dj;
 while(pq<=uq)
 {
  i=q[pq].i;j=q[pq++].j;
  nr=ro[i][j];nr++;
  for(di=-1;di<=1;di++)
   for(dj=-1;dj<=1;dj++)
     if((di!=0||dj!=0)
	&&i+di>=1&&i+di<=n&&
	  j+dj>=1&&j+dj<=m&&ro[i+di][j+dj]==0)
	     {
	      ro[i+di][j+dj]=nr;
	      q[++uq].i=i+di;q[uq].j=j+dj;
	     }
 }
 q[pq=uq=0].i=ij,q[pq].j=jj;
 ju[ij][jj]=1;
 while(pq<=uq)
 {
  i=q[pq].i;j=q[pq++].j;
  nr=ju[i][j];nr++;
  for(di=-1;di<=1;di++)
   for(dj=-1;dj<=1;dj++)
     if((di!=0||dj!=0)
	&&i+di>=1&&i+di<=n&&
	  j+dj>=1&&j+dj<=m&&ju[i+di][j+dj]==0)
	     {
	      ju[i+di][j+dj]=nr;
	      q[++uq].i=i+di;q[uq].j=j+dj;
	     }
 }
 int min=10001,imin,jmin;
 for(i=1;i<=n;i++)
  for(j=1;j<=m;j++)
    if(ro[i][j]==ju[i][j]&&ro[i][j]>0)
	      if(ro[i][j]<min)
			min=ro[imin=i][jmin=j];
 freopen("rj.out","w",stdout);
 printf("%d %d %d\n",min,imin,jmin);
 fclose(stdout);
 return 0;
}