Cod sursa(job #363083)

Utilizator zloteanu.adrianzloteanu adrian nichita zloteanu.adrian Data 11 noiembrie 2009 19:40:31
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.26 kb
#include<stdio.h>
struct nickq{int a,b;};
int m2[101][101],m3[101][101];
int main()
{int j,i,leem=1,m1[101][101],n,m,r1,r2,j1,j2;
char v[101],nr;
nickq lee[10001];
freopen("rj.in","r",stdin);
freopen("rj.out","w",stdout);
scanf("%d%d",&n,&m);
gets(v);
for(i=1;i<=n;i++)
    {gets(v);
    for(j=0;j<m;j++)
    {nr=v[j];
    if(nr=='R')
     {r1=i;
     r2=j+1;
     m1[i][j+1]=-2;}
    if(nr=='J')
     {j1=i;
     j2=j+1;
     m1[i][j+1]=-3;}
    if(nr=='X')
     m1[i][j+1]=-1;
    if(nr==' ')
     m1[i][j+1]=0;}}
lee[1].a=r1;
lee[1].b=r2;
int f;
for(f=1;f<=leem;f++)
  {i=lee[f].a;
  j=lee[f].b;
  if(i>1&&(m1[i-1][j]==0||m1[i-1][j]==-3)&&(m2[i-1][j]==0||m2[i][j]<m2[i-1][j]))
   {leem++;
   lee[leem].a=i-1;
   lee[leem].b=j;
   m2[i-1][j]=m2[i][j]+1;}
  if(i<n&&(m1[i+1][j]==0||m1[i+1][j]==-3)&&(m2[i+1][j]==0||m2[i][j]<m2[i+1][j]))
   {leem++;
   lee[leem].a=i+1;
   lee[leem].b=j;
   m2[i+1][j]=m2[i][j]+1;}
  if(j>1&&(m1[i][j-1]==0||m1[i][j-1]==-3)&&(m2[i][j-1]==0||m2[i][j]<m2[i][j-1]))
   {leem++;
   lee[leem].a=i;
   lee[leem].b=j-1;
   m2[i][j-1]=m2[i][j]+1;}
  if(j<n&&(m1[i][j+1]==0||m1[i][j+1]==-3)&&(m2[i][j+1]==0||m2[i][j]<m2[i][j+1]))
   {leem++;
   lee[leem].a=i;
   lee[leem].b=j+1;
   m2[i][j+1]=m2[i][j]+1;}}
lee[1].a=j1;
lee[1].b=j2;
leem=1;
for(f=1;f<=leem;f++)
  {i=lee[f].a;
  j=lee[f].b;
  if(i>1&&(m1[i-1][j]>-1||m1[i-1][j]==-2)&&m1[i-1][j]==0&&(m3[i-1][j]==0||m3[i][j]<m3[i-1][j]))
   {leem++;
   lee[leem].a=i-1;
   lee[leem].b=j;
   m3[i-1][j]=m3[i][j]+1;}
  if(i<n&&(m1[i+1][j]>-1||m1[i+1][j]==-2)&&m1[i+1][j]==0&&(m3[i+1][j]==0||m3[i][j]<m3[i+1][j]))
   {leem++;
   lee[leem].a=i+1;
   lee[leem].b=j;
   m3[i+1][j]=m3[i][j]+1;}
  if(j>1&&(m1[i][j-1]>-1||m1[i][j-1]==-2)&&m1[i][j-1]==0&&(m3[i][j-1]==0||m3[i][j]<m3[i][j-1]))
   {leem++;
   lee[leem].a=i;
   lee[leem].b=j-1;
   m3[i][j-1]=m3[i][j]+1;}
  if(j<n&&(m1[i][j+1]>-1||m1[i][j+1]==-2)&&m1[i][j+1]==0&&(m3[i][j+1]==0||m3[i][j]<m3[i][j+1]))
   {leem++;
   lee[leem].a=i;
   lee[leem].b=j+1;
   m3[i][j+1]=m3[i][j]+1;}}
int min=0;
int ni,nj;
for(i=1;i<=n;i++)
   for(j=1;j<=m;j++)
     if(m2[i][j]>0&&m2[i][j]==m3[i][j]&&(min==0||min>m2[i][j]))
      {min=m2[i][j];
      ni=i;
      nj=j;}
printf("%d %d %d",min,ni,nj);
return 0;}