Cod sursa(job #1147072)

Utilizator beatrice01Ferco Beatrice beatrice01 Data 19 martie 2014 16:11:31
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.23 kb
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
int romeo[101][101];
int julieta[101][101];
int main()
{
    struct poz
   { int l,c;};
    poz coada[10201],coada2[10201] ;
   int dl[9],dc[9],n,m,x,y,u=0,p=0,r1,r2,j1,j2,i,j,x1,y1,ok=0;
   char linia[101];
        dl[1]=-1;dl[2]=0;dl[3]=1;dl[4]=0;dl[5]=-1;dl[6]=-1;dl[7]=1;dl[8]=1;
        dc[1]=0;dc[2]=1;dc[3]=0;dc[4]=-1;dc[5]=-1;dc[6]=1;dc[7]=0-1;dc[8]=1;
   ifstream f("rj.in");ofstream g("rj.out");
    f>>n>>m;
    f.get();
    for(j=1;j<=n;j++)
    {   f.getline(linia,101);
        for(i=0;i<strlen(linia);i++)
          {if(linia[i]=='R'){romeo[j][i+1]=1;r1=j;r2=i+1;}
           if(linia[i]=='J'){romeo[j][i+1]=0;j1=j;j2=i+1;}
           if(linia[i]=='X')romeo[j][i+1]=-1;
           if(linia[i]==' ')romeo[j][i+1]=0;}
    }
    for(i=0;i<=n+1;i++) // bordare margini cu -1
		{ romeo[0][i]=-1;romeo[n+1][i]=-1;
		  romeo[i][m+1]=-1;romeo[i][0]=-1;}
   for(i=0;i<=n+1;i++)
      for(j=0;j<=m+1;j++)  julieta[i][j]=romeo[i][j];
   coada[0].l=r1; // initializam primul elem din coada cu coordonatele lui romeo
   coada[0].c=r2;
   coada2[0].l=j1;  // initializam primul elem din coada cu coordonatele julietei
   coada2[0].c=j2;
   while(p<=u && romeo[j1][j2]==0)
    {   x=coada[p].l; y=coada[p].c;
        p++;
        for(i=1;i<=8;i++)
         {
             x1=x+dl[i];  y1=y+dc[i];
             if(romeo[x1][y1]==0)
               {   romeo[x1][y1]=romeo[x][y]+1;
                   u++;
                   coada[u].l=x1;
                   coada[u].c=y1;}
         }
     }
     p=0;u=0;julieta[j1][j2]=1;julieta[r1][r2]=0;
    while(p<=u && julieta[r1][r2]==0)
    { x=coada2[p].l; y=coada2[p].c;
        p++;
        for(i=1;i<=8;i++)
         {
             x1=x+dl[i];  y1=y+dc[i];
             if(julieta[x1][y1]==0)
               {   julieta[x1][y1]=julieta[x][y]+1;
                   u++;
                   coada2[u].l=x1;
                   coada2[u].c=y1;}
         }
    }
    for(i=1;i<=n;i++)
      for(j=1;j<=m && ok==0;j++)
       if(romeo[i][j]==julieta[i][j] && romeo[i][j]!=-1 && romeo[i][j]!=0)
         {
             ok=1;
             g<<romeo[i][j]<<" "<<i<<" "<<j;
         }
   return 0;
}