Cod sursa(job #368073)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 23 noiembrie 2009 22:16:52
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
# include <stdio.h>
int a[105][105],b[105][105],i,j,n,m,x[10005],y[10005],xf,yf,k,p,u,tmin,ri,rj,ji,jj;
char ch,sir[100];
  int q[10]={0,1,-1,0,0,-1,-1,1,1};
  int w[10]={0,0,0,-1,1,-1,1,-1,1};

int main ()
{
freopen ("rj.in","r",stdin);
freopen ("rj.out","w",stdout);
scanf ("%i%i",&n,&m);
scanf ("%c",&ch);
for (i=1;i<=n;i++)
{
fgets (sir,115,stdin);
 for (j=0;j<m;j++)
{
 ch=sir[j];


   if (ch=='R')
 {
 ri=i;
 rj=j+1;

 }

 if (ch=='J')
 {

 ji=i;
 jj=j+1;

 }
 if (ch=='X')
 a[i][j+1]=-1;
 if (ch==' ')
 a[i][j+1]=0;

 }

 }
 for (i=0;i<=m+1;i++)
 {
 a[0][i]=-1;
 a[n+1][i]=-1;
 }
 for (i=0;i<=n+1;i++)
 {
 a[i][0]=-1;
 a[i][m+1]=-1;
 }

 for (i=0;i<=n+1;i++)
 for (j=0;j<=m+1;j++)
 b[i][j]=a[i][j];
  a[ri][rj]=1;
  b[ji][jj]=1;


  x[1]=ri;
  y[1]=rj;

    p=1;
    u=1;

 while (p<=u)
 {


   for (k=1;k<=8;k++)
   {

     i=x[p];
     j=y[p];

     i=i+q[k];
     j=j+w[k];
    if (a[i][j]==0)
    {
     u++;
     a[i][j]=1+a[x[p]][y[p]];
     x[u]=i;
     y[u]=j;
    }



   }

   p++;

 }

 x[1]=ji;
 y[1]=jj;
 p=1;
    u=1;

 while (p<=u)
 {


   for (k=1;k<=8;k++)
   {

     i=x[p];
     j=y[p];

     i=i+q[k];
     j=j+w[k];
    if (b[i][j]==0)
    {
     u++;
     b[i][j]=1+b[x[p]][y[p]];
     x[u]=i;
     y[u]=j;
    }



   }

   p++;

 }
    tmin=32000;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if (a[i][j]==b[i][j] && a[i][j]!=-1 && a[i][j]!=0)
if (tmin>a[i][j])
tmin=a[i][j];
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if (a[i][j]==b[i][j] && a[i][j]==tmin)
{
printf ("%i %i %i",tmin,i,j);
i=n+1;
break;
}







 return 0;
}