Cod sursa(job #2316965)

Utilizator Carol_LucaCarol Luca Carol_Luca Data 12 ianuarie 2019 16:35:31
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.25 kb
#include <fstream>

#include <iomanip>

#include <cstring>

using namespace std;

ifstream f("rj.in");

ofstream g("rj.out");

int mat1[105][105],n,m,tmin,mat2[105][105],mini=9999999;

struct poz{int lin,col;}pozcrt,a,b;

const int dl[8]={-1,-1,0,1,1,1,0,-1};

const int dc[8]={0,1,1,1,0,-1,-1,-1};

poz coada[105*105];

int inc,sf;

void citire()

{int i,j,lg;

char s[105];

f>>n>>m;

f.get();

for(i=1;i<=n;i++)

   {f.getline(s,105);

    lg=strlen(s);

    for(j=0;j<lg;j++)

        {

         if(s[j]==' ')

            mat1[i][j+1]=0;

         else if(s[j]=='X')

            mat1[i][j+1]=-1;

         else if(s[j]=='J')

               {mat1[i][j+1]=1;

               a.lin=i;

               a.col=j+1;}

         else {mat1[i][j+1]=1;

               b.lin=i;

               b.col=j+1;}

        }

   }



}

void bordare()

{int i,j;

for(i=0;i<=n+1;i++)

   {mat1[i][0]=-1;

    mat1[i][m+1]=-1;

   }

for(j=0;j<=m+1;j++)

   {mat1[0][j]=-1;

    mat1[n+1][j]=-1;

   }

for(i=0;i<=n+1;i++)

    for(j=0;j<=m+1;j++)

        mat2[i][j]=mat1[i][j];





}



void afisare(int mat[105][105])

{int i,j;

for(i=0;i<=n+1;i++)

    {for(j=0;j<=m+1;j++)

        g<<setw(2)<<mat[i][j]<<" ";

     g<<endl;}

g<<endl;

}

void lee(poz x, poz y,int mat[105][105])

{int i;

poz vecin;

inc=0;

sf=-1;

coada[++sf]=x;

pozcrt=x;

mat[y.lin][y.col]=0;

while(inc<=sf && ((pozcrt.lin!=y.lin || pozcrt.col!=y.col)) )

     {pozcrt=coada[inc++];

      for(i=0;i<8;i++)



           {vecin.lin=pozcrt.lin+dl[i];

           vecin.col=pozcrt.col+dc[i];

           if(mat[vecin.lin][vecin.col]==0)

             {mat[vecin.lin][vecin.col]=mat[pozcrt.lin][pozcrt.col]+1;

              coada[++sf]=vecin;}

          }





     }



}



int main()

{int i,j,linie,coloana;

citire();

bordare();

lee(a,b,mat1);

lee(b,a,mat2);

for(i=n;i>0;i--)

    for(j=m;j>0;j--)

        if(mat1[i][j]==mat2[i][j] && mat1[i][j]>0 && mat1[i][j]<=mini)

           {mini=mat1[i][j];

            linie=i;

            coloana=j;

            }

g<<mini<<" "<<linie<<" "<<coloana;



    return 0;

}