Cod sursa(job #139393)

Utilizator O_NealS. Alex O_Neal Data 20 februarie 2008 01:39:24
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.7 kb
#include<fstream.h>
#include<string.h>
#include<stdlib.h>

ifstream fin("rj.in");
ofstream fout("rj.out");

int n,m,i,j,k,cont=32000,pas,a[100][100],b[100][100],r,ju,pozi,pozj,boo=1;
int c1[8]={-1,-1,-1,0,0,1,1,1},c2[8]={-1,0,1,-1,1,-1,0,1};
int r1[8],r2[8],j1[8],j2[8];
char c;


int OK(int i, int j)

 { 
	     if(i>=1&&i<=n&&j>=1&&j<=m) return 1;
             return 0;
 }
 
 
int main()

 {        fin>>n>>m;
          for(i=1;i<=n;i++)
               for(j=0; j<=m; j++ )
               
			      { c=fin.get(); if(c=='R') b[i][j]=1; if(c=='J') a[i][j]=1; if(c=='X') {a[i][j]=-1; b[i][j]=-1;} }
             
          pas=1;
          
          while(boo)
                    { boo=0;
                      for(i=1; i<=n; i++)
                         for(j=1;j<=m;j++)
					      { if(b[i][j]==pas)
                                                  {r=0;
                                                   for(k=0; k<8; k++)
                                                        if( OK(i+c1[k],j+c2[k]) )
                                                          if(b[i+c1[k]][j+c2[k]]==0) { b[i+c1[k]][j+c2[k]]=pas+1; boo=1; r1[++r]=i+c1[k]; r2[r]=j+c2[k]; }
                                                  }      
                                               
                            if(a[i][j]==pas)
                                                  {ju=0;
                                                   for(k=0; k<8; k++)
                                                        if( OK(i+c1[k],j+c2[k]) )
                                                          if( a[i+c1[k]][j+c2[k]]==0 || a[i+c1[k]][j+c2[k]]==pas+1) { a[i+c1[k]][j+c2[k]]=pas+1; boo=1; j1[++ju]=i+c1[k]; j2[ju]=j+c2[k]; }
                                                  }
                                               
                            }
                            
                        for(i=1; i<=r; i++)
                          for(j=1; j<=ju; j++)
                             if(r1[i]==j1[j]&&r2[i]==j2[j]&&cont>a[r1[i]][r2[i]]) { pozi=r1[i]; pozj=r2[i]; cont=a[pozi][pozj];}  
                                   
                      pas++;
                    }
           
      
         
         fout<<cont<<" "<<pozi<<" "<<pozj;   
         
	     /*fout<<"\n";
         
          for(i=1; i<=n; i++)
            { fout<<"\n";
              for(j=1;j<=m; j++)
                fout<<b[i][j]<<" ";
            }
            
         fout<<"\n";
         
         for(i=1; i<=n; i++)
            { fout<<"\n";
              for(j=1;j<=m; j++)
                fout<<a[i][j]<<" ";
            }
           */        
         return 0;
         
 }