Cod sursa(job #1896840)

Utilizator Mihai07Anghel Mihai Mihai07 Data 28 februarie 2017 22:24:34
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.47 kb
#include <iostream>
#include <fstream>
/// AM VERIFICAT-O PE INFOARENA SI PE CAMPIONI SI PRIMESC O EROARE LEGATA DE IESIREA DIN MEMORIE(KILLED BY SIGNAL 11) SI NU AM REUSIT SA GASESC PROBLEMA
struct punct{int x;int y;};
using namespace std;

void lee(long i,long j,long b[105][105])
{ punct C[11000];
  long p,u,lin,col;
  p=1;u=1;
  C[p].x=i;
  C[p].y=j;
  b[i][j]=1;
                                                              ///aplicam lee pentru toate directiile
   while(p<=u){
    //adaugam in coada vecinii lui
        lin=C[p].x;
        col=C[p].y;
      if(b[lin-1][col]==0){
         u++;
        C[u].x=lin-1;
        C[u].y=col;
        b[lin-1][col]=b[lin][col]+1;
      }
      if(b[lin-1][col-1]==0){
         u++;
        C[u].x=lin-1;
        C[u].y=col-1;
        b[lin-1][col-1]=b[lin][col]+1;
      }
       if(b[lin][col+1]==0){
         u++;
        C[u].x=lin;
        C[u].y=col+1;
        b[lin][col+1]=b[lin][col]+1;
      }
       if(b[lin+1][col+1]==0){
         u++;
        C[u].x=lin+1;
        C[u].y=col+1;
        b[lin+1][col+1]=b[lin][col]+1;
      }
       if(b[lin+1][col]==0){
         u++;
        C[u].x=lin+1;
        C[u].y=col;
        b[lin+1][col]=b[lin][col]+1;
      }
      if(b[lin+1][col+1]==0){
         u++;
        C[u].x=lin+1;
        C[u].y=col+1;
        b[lin+1][col+1]=b[lin][col]+1;
      }
      if(b[lin][col-1]==0){
         u++;
        C[u].x=lin;
        C[u].y=col-1;
        b[lin][col-1]=b[lin][col]+1;
      }
      if(b[lin-1][col-1]==0){
         u++;
        C[u].x=lin-1;
        C[u].y=col-1;
        b[lin-1][col-1]=b[lin][col]+1;
      }
      p++;

   }

}
int main()
{  char a[105][105];
   long i,j,m,n,i2,j2,i3,j3,b[105][105]={-2},c[105][105]={-2};
   punct coord[11000];
   ifstream f("rj.in");
   ofstream g("rj.out");
   f>>n>>m;
   i=0;
   j=0;
  f.get();

  for(i=1;i<=n+1;i++){            /// nu se initializa b,c cu -2 in declarare asa ca am pus -2 aici
    for(j=1;j<=m+1;j++){
      f.get(a[i][j]);
      b[i][j]=-2;
      c[i][j]=-2;
    }}

  /* for(i=1;i<n+1;i++){
    for(j=1;j<=m+1;j++){
        cout<<a[i][j];
     }
    }
*/

  for(i=1;i<n+1;i++){
    for(j=1;j<m+1;j++){
     if(a[i][j]=='R'){             ///pun zero in locurile prin care se poate parcurge
      i2=i;
      j2=j;
      b[i][j]=0;
      c[i][j]=0;
     }
     if(a[i][j]=='J'){
      i3=i;
      j3=j;
     b[i][j]=0;
     c[i][j]=0;
     }
     if(a[i][j]==' '){
        b[i][j]=0;
        c[i][j]=0;
     }
    }

  }

 lee(i2,j2,b);
 /*for(i=1;i<n+1;i++){
    for(j=1;j<m+1;j++){
        cout<<b[i][j]<<" ";
     }cout<<endl;
    }*/
 lee(i3,j3,c);
 /*cout<<endl;
 for(i=1;i<n+1;i++){
    for(j=1;j<m+1;j++){
        cout<<c[i][j]<<" ";
     }cout<<endl;
    }
    */

 long tmin2,tmin[11000],k=0,min1=999,min2=999;

 for(i=1;i<n+1;i++)
    for(j=1;j<m+1;j++)
       if(b[i][j]==c[i][j] && b[i][j]!=-2 && b[i][j]!=0){
          k++;
          tmin[k]=c[i][j];
          coord[k].x=i;
          coord[k].y=j;
       }

  if(k!=1){                   ///in cazul in care am mai multe solutii,le ordonez in functie de minimul liniei ci coloanei
   for(i=1;i<=k;i++)
        if(coord[i].x<min1)
         if(coord[i].y<min2){
          tmin2=tmin[i];
          min1=coord[i].x;
          min2=coord[i].y;
         }
    g<<tmin2<<' '<<min1<<' '<<min2;
  }else
    g<<tmin[1]<<' '<<coord[1].x<<' '<<coord[1].y;
    return 0;
}