Cod sursa(job #1028148)

Utilizator danielt556daniel teodorovici danielt556 Data 13 noiembrie 2013 18:13:00
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.56 kb
#include <fstream>

using namespace std;
int n,xm,ym,minn=999999,m,xr,yr,xj,yj,mat[100][100],matt[100][100],dx[]={-1,-1,0,1,1,1,0,-1},dy[]={0,1,1,1,0,-1,-1,-1};
ofstream out("rj.out");
void citire()
{
    ifstream in("rj.in");
    char sir[100];

    in>>n>>m;
    int i,j;
    char c;
    in.getline(sir,100,'\n');

    for(i=0;i<n;i++)
    {
        in.getline(sir,100,'\n');
        for(j=0;j<m;j++)
        {
            c=sir[j];
            if(c=='R')
                {
                    xr=i;
                    yr=j;
                }
            if(c=='J')
                {
                    xj=i;
                    yj=j;
                }
            if (c=='X')
            {
                mat[i][j]=1;
                matt[i][j]=1;

            }
        }

    }
    in.close();
}
int bune(int ii, int jj)
{
    return(ii>=0&&ii<n&&jj>=0&&jj<m);
}

int poater(int ii, int jj,int pas)
{
    return((mat[ii][jj]==0)||(pas<mat[ii][jj]));
}
int poatej(int ii, int jj,int pas)
{
    return((matt[ii][jj]==0)||(pas<matt[ii][jj]));
}
void afisare(int mat[][100])
{
    int i,j;
        for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            out<<mat[i][j]<<" ";
        }
        out<<"\n";
    }
}
void verificare()
{
    int i,j;
        for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            if ((mat[i][j]==matt[i][j])&&(mat[i][j]>1))
            {
                if(mat[i][j]<minn)
                {
                    minn=mat[i][j];
                    xm=i;
                    ym=j;
                }
            }
        }

    }
      out<<minn<<" "<<xm+1<<" "<<ym+1<<"\n";
}
void labirintr(int i,int j,int pas)
{
    int ii,jj,k;
    for(k=0;k<8;k++)
    {
        ii=i+dx[k];
        jj=j+dy[k];
        if(bune(ii,jj))
        {
            if(poater(ii,jj,pas))
            {
                mat[ii][jj]=pas;
                labirintr(ii,jj,pas+1);
            }
        }
    }

}
void labirintj (int i,int j,int pas)
{
    int ii,jj,k;
    for(k=0;k<8;k++)
    {
        ii=i+dx[k];
        jj=j+dy[k];
        if(bune(ii,jj))
        {
            if(poatej(ii,jj,pas))
            {

                matt[ii][jj]=pas;
                labirintj(ii,jj,pas+1);
            }

    }
    }

}

int main()
{
    citire();
    mat[xr][yr]=1;
    labirintr(xr,yr,2);
   // afisare(mat);
    matt[xj][yj]=1;
    labirintj(xj,yj,2);
    verificare();
     //out<<"\n";
    // afisare(matt);
    out.close();
    return 0;
}