Cod sursa(job #1033041)

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

using namespace std;
int n,m,xr,yr,xj,yj;
const int dx[]={-1,-1,0,1,1,1,0,-1};
const int dy[]={0,1,1,1,0,-1,-1,-1};
ofstream out("rj.out");
ifstream in("rj.in");
void citire( int mr[][100], int mj[][100])
{

    char sir[101];

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

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

            }
            else
            {
                mr[i][j]=0;
                mj[i][j]=0;
            }
        }

    }
    in.close();
}
int bune(int ii, int jj)
{
    return(ii>=0&&ii<n&&jj>=0&&jj<m);
}
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 leec(int xi,int yi,int mat[][100])
{
    int ii,jj,pi,ps,x[200],y[200],k;
    x[0]=xi;
    y[0]=yi;
    pi=0;
    ps=0;
    while(pi<=ps)
    {
        for(k=0;k<8;k++)
        {
            ii=x[pi]+dx[k];
            jj=y[pi]+dy[k];
            if(bune(ii,jj))
            {
                if(mat[ii][jj]==0)
                {
                    mat[ii][jj]=mat[x[pi]][y[pi]]+1;
                    ps=ps+1;
                    x[ps]=ii;
                    y[ps]=jj;
                }
            }
        }
        pi=pi+1;
    }
}
int main()
{
    int mr[100][100],mj[100][100],minn,xf,yf,i,j;
    citire(mr,mj);
    mr[xr][yr]=1;
    leec(xr,yr,mr);
    //afisare(mr);
   // out<<"\n";
    mj[xj][yj]=1;
    leec(xj,yj,mj);
    //afisare(mj);
   minn=n*m;
      for(i=0;i<n;i++)
   {
       for(j=0;j<m;j++)
       {
           if(mr[i][j]==mj[i][j] && mr[i][j]<minn && mr[i][j]>1)
           {
               minn=mr[i][j];
               xf=i;
               yf=j;
           }
       }
   }
   out<<minn<<" "<<xf+1<<" "<<yf+1<<" ";
    out.close();
    return 0;
}