Cod sursa(job #1378903)

Utilizator Anaa_IIanciuc Ana Anaa_I Data 6 martie 2015 15:01:46
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.96 kb
#include <fstream>

using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
char a[102][102];
int d[102][102], d2[102][102];
const int dlin[]= {1,-1,0,0,-1,-1,1,1};
const int dcol[]= {0,0,-1,1,-1,1,-1,1};
const int n=101, m=101;
struct poz
{
    short int lin, col;
};
poz q[n*m];
/*void lee(x)
{
    poz x,y;
   int  p=0, u=-1;
    q[++u]=x;
    d[x.lin][x.col]=1;
    while (p<=u)
    {
        x=q[p++];
        for(int i=0; i<8; i++)
        {
            y.lin=x.lin+dlin[i];
            y.col=x.col+dcol[i];
            if(d[y.lin][y.col]==0)
            {
                q[++u]=y;
                d[y.lin][y.col]=1+d[x.lin][x.col];
            }
        }
    }
}*/
int main()
{
    int n,m;
    poz x, y;
    f>>n>>m>>ws;
    for(int i=1; i<=n; i++)
    {
        f.getline(1+a[i],101);
      //  g << 1+a[i] << "\n";
    }
    for(int i=0; i<=n+1; i++)
        d[i][0] = d[i][m+1] = -1;
    for (int j=0; j<=m+1; j++)
        d[0][j] = d[n+1][j] = -1;

    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
        {
            if(a[i][j]=='X') d[i][j]=-1;
            else if(a[i][j]=='R')
            {
                x.lin=i;
                x.col=j;
            }
            else if(a[i][j]=='J')
            {
                y.lin=i;
                y.col=j;
            }
        }
           // poz x,y;
   int  p=0, u=-1;
    q[++u]=x;
    d[x.lin][x.col]=1;
    while (p<=u)
    {
        x=q[p++];
        for(int i=0; i<8; i++)
        {
            y.lin=x.lin+dlin[i];
            y.col=x.col+dcol[i];
            if(d[y.lin][y.col]==0)
            {
                q[++u]=y;
                d[y.lin][y.col]=1+d[x.lin][x.col];
            }
        }
    }
//     lee(x);
    //g<<d[y.lin][y.col];
    for(int i=0; i<=n+1; i++)
        d2[i][0] = d2[i][m+1] = -1;
    for (int j=0; j<=m+1; j++)
        d2[0][j] = d2[n+1][j] = -1;

 for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
        {
            if(a[i][j]=='X') d2[i][j]=-1;
            else if(a[i][j]=='R')
            {
                y.lin=i;
                y.col=j;
            }
            else if(a[i][j]=='J')
            {
                x.lin=i;
                x.col=j;
            }
        }
        p=0, u=-1;
    q[++u]=x;
    d2[x.lin][x.col]=1;
    while (p<=u)
    {
        x=q[p++];
        for(int i=0; i<8; i++)
        {
            y.lin=x.lin+dlin[i];
            y.col=x.col+dcol[i];
            if(d2[y.lin][y.col]==0)
            {
                q[++u]=y;
                d2[y.lin][y.col]=1+d2[x.lin][x.col];
            }
        }
    }

    for(int i=0; i<=n+1; i++)
    {
        for(int j=0; j<=m+1; j++)
            if(d[i][j]==d2[i][j]&&d[i][j]!=-1&&d[i][j]!=0) g<<d[i][j]<<" "<<i<<" "<<j;
       //g<<"\n";
    }
    /*for(int i=0;i<=n+1;i++)
    {
        for(int j=0;j<=m+1;j++)
        g<<d[i][j]<<" ";
        g<<"\n";
    }*/
    return 0;
}