Cod sursa(job #329320)

Utilizator doru.nituNitu Doru Constantin doru.nitu Data 5 iulie 2009 20:55:22
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 5.03 kb
#include<stdio.h>

int a[104][104],b[104][104],i,j,n,m,xr,yr,xj,yj,k;
char s[104];

struct nod
{ 
       int x,y;
} r[10001];

void ver( int i,int j,int a[][104])
{ 
     if(i-1>=1) {  if(a[i-1][j]==0||a[i-1][j]>a[i][j]+1) { a[i-1][j]=a[i][j]+1;
                                                            r[++k].x=i-1;
                                                            r[k].y=j;
                                                         }
                   if(j-1>=1) if(a[i-1][j-1]==0||a[i-1][j-1]>a[i][j]+1) { a[i-1][j-1]=a[i][j]+1;
                                                                           r[++k].x=i-1;
                                                                           r[k].y=j-1;
                                                                        }
                   if(j+1<=m) if(a[i-1][j+1]==0||a[i-1][j+1]>a[i][j]+1) { a[i-1][j+1]=a[i][j]+1;
                                                                          r[++k].x=i-1;
                                                                          r[k].y=j+1;
                                                                        }
                }
       if(j-1>=1) if(a[i][j-1]==0||a[i][j-1]>a[i][j]+1) { a[i][j-1]=a[i][j]+1;
                                                           r[++k].x=i;
                                                           r[k].y=j-1;
                                                        }
       if(j+1<=m) if(a[i][j+1]==0||a[i][j+1]>a[i][j]+1) { a[i][j+1]=a[i][j]+1;
                                                         r[++k].x=i;
                                                         r[k].y=j+1;
                                                        }                                                               
      if(i+1<=n) { if(a[i+1][j]==0||a[i+1][j]>a[i][j]+1) { a[i+1][j]=a[i][j]+1;
                                                           r[++k].x=i+1;
                                                           r[k].y=j;
                                                         }
                   if(j-1>=1) if(a[i+1][j-1]==0||a[i+1][j-1]>a[i][j]+1) { a[i+1][j-1]=a[i][j]+1;
                                                                          r[++k].x=i+1;
                                                                          r[k].y=j-1;
                                                                        }
                   if(j+1<=m) if(a[i+1][j+1]==0||a[i+1][j+1]>a[i][j]+1) { a[i+1][j+1]=a[i][j]+1;
                                                                          r[++k].x=i+1;
                                                                          r[k].y=j+1;
                                                                        }
                 }
}                                                                                                                                                                                                                            
                                                                                                                                                                                                                     

int main()
{ 
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    
    scanf("%d %d",&n,&m);
    scanf("\n");
    
    for(i=1;i<=n;i++)
                       { fgets(s+1,103,stdin);
                         for(j=1;j<=m;j++)
                                      { if(s[j]=='X') { a[i][j]=-1;
                                                        b[i][j]=-1;
                                                      }
                                         if(s[j]=='R') { a[i][j]=1; 
                                                         xr=i;
                                                         yr=j;
                                                       }  
                                         if(s[j]=='J') {  b[i][j]=1;
                                                          xj=i;
                                                          yj=j;
                                                       }   
                                      }  
                          } 
   r[++k].x=xr;
   r[k].y=yr;
   for(i=1;i<=k;i++) ver(r[i].x,r[i].y,a);   
   
    k=0;
    r[++k].x=xj;
    r[k].y=yj;    
    for(i=1;i<=k;i++) ver(r[i].x,r[i].y,b);  
                       
     k=2000000000; 
    for(i=1;i<=n;i++)
       for(j=1;j<=m;j++) if(a[i][j]==b[i][j]&&a[i][j]>0) if(a[i][j]<k) { k=a[i][j] ;                        
                                                                 xr=i;
                                                                 yr=j;
                                                              }          
     printf("%d %d %d\n",k,xr,yr);                                                                                           
                                         
      fclose(stdin);
      fclose(stdout);
       return 0;
}