Cod sursa(job #1024979)

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

using namespace std;
int n,xm,ym,minn=999999,m,xr,yr,xj,yj,mat[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;
        }

    }
    in.close();
}
int bune(int ii, int jj)
{
    return(ii>=0&&ii<n&&jj>=0&&jj<m);
}
int poate(int ii, int jj,int pas)
{
    return((mat[ii][jj]==0)||(pas<mat[ii][jj]));
}
void afisare()
{
    int i,j;
        for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            out<<mat[i][j]<<" ";
        }
        out<<"\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(poate(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(mat[ii][jj]==pas&&pas==minn)
            {
                if(jj<ym)
                {
                    xm=ii;
                    ym=jj;
                }
            }
            if(mat[ii][jj]==pas&&pas<minn)
                {
                    minn=pas;
                    xm=ii;
                    ym=jj;
                }
            if(poate(ii,jj,pas))
            {

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

    }
    }

}

int main()
{
    citire();
    mat[xr][yr]=1;
    labirintr(xr,yr,2);
    mat[xj][yj]=1;
    labirintj(xj,yj,2);
    out<<minn<<" "<<xm+1<<" "<<ym+1;
    out.close();
    return 0;
}