Cod sursa(job #1238186)

Utilizator DragulinSilviuDragulin Silviu DragulinSilviu Data 5 octombrie 2014 22:04:01
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.72 kb
#include <fstream>
#include <iomanip>

using namespace std;
ifstream x("rj.in");
ofstream y("rj.out");
int dl[]={-1,-1,-1,0,1,1,1,0};//deplasarea pe linie
int dc[]={-1,0,1,1,1,0,-1,-1};//deplasarea pe coloana

char c;

int oras1[101][101],oras2[101][101],i,j,n,m,prim,ultim,k;

int tmin,x_intalnire,y_intalnire; /* timpul minim si coordonatele
de intalnire a lui romeo cu julieta*/

struct silviu
 {
     int lin,col;
 };

/*silviu cr[5050],sr,vr,pr,cj[5050],sj,vj,pj;/*coada romeo,start romeo,
vecin romeo ,pozitie curenta romeo,coada julieta,start juliata
vecin julieta ,pozitie curenta julieta*/// ceva ce nu mi-a iesit

silviu C[10201],v,p,sr,sj;/*coada,vecinul,pozitia curenta
start romeo,start sulieta,*/

void citesc()
 {
     x>>n>>m;
     x.get(c);
     for(i=1;i<=n;i++)
      {
          for(j=1;j<=m;j++)
           {
               x.get(c);
               if(c=='R') {sr.lin=i;sr.col=j;/*oras1[i][j]=1;*/}
               if(c=='J') {sj.lin=i;sj.col=j;/*oras1[i][j]=2;*/}
               if(c=='X') oras1[i][j]=oras2[i][j]=-1;
           }
            x.get(c);
      }
     for(i=0;i<=m+1;i++) oras1[0][i]=oras1[n+1][i]=oras2[0][i]=oras2[n+1][i]=-1;
     for(i=0;i<=n+1;i++) oras1[i][0]=oras1[i][m+1]=oras2[i][0]=oras2[i][m+1]=-1;
 }


void scriu(int o[101][101])
 {
     for(i=1;i<=n;i++)
      {
          for(j=1;j<=m;j++)
           y<<setw(2)<<o[i][j];
          y<<'\n';
      }
 }

void lee( silviu s ,silviu f,int o[101][101])//start, final
 {
     prim=ultim=0;
     C[0]=s;
     o[s.lin][s.col]=1;
     //y<<s.lin<<s.col;
     //y<<"\n\n"<<f.lin<<f.col;
     while(prim<=ultim && o[f.lin][f.col]==0)
      {
          p=C[prim];
          prim++;
          for(k=0;k<8;k++)
           {

               v.lin=p.lin+dl[k];
               v.col=p.col+dc[k];
               if(o[v.lin][v.col]==0)
                {
                    ultim++;
                    C[ultim]=v;
                    o[v.lin][v.col]=o[p.lin][p.col]+1;
                }
           }
      }


 }
void afisez()
 {
    int tmin=200;
    //tmin=oras1[sj.lin][sj.col]/2+1;
    for(i=1;i<=n;i++)
         for(j=1;j<=n;j++)
           if(oras1[i][j]==oras2[i][j] && oras1[i][j]>1 && oras1[i][j]<tmin)
            {
                //y<<oras1[i][j]<<" - "<<oras2[i][j]<<'\n' ;

                tmin=oras1[i][j];
                x_intalnire=i;
                y_intalnire=j;
                //y<<'\n'<<min<<'\n';
            }
      y<<tmin<<' '<<x_intalnire<<' '<<y_intalnire;
 }
int main()
{
    citesc();
    //scriu(oras1);
    lee(sr,sj,oras1);
    //y<<"\n\n";
    //scriu(oras1);
    lee(sj,sr,oras2);
    //y<<"\n\n";
    //scriu(oras2);
    afisez();


    return 0;
}