Cod sursa(job #1653496)

Utilizator miruna999Morarasu Miruna miruna999 Data 16 martie 2016 08:31:24
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.32 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m,xr,yr,xj,yj;
char a[102][102];
short int r[102][102],j[102][102];

void lee(int x0,int y0,short int b[102][102])
{
    struct coada{int l,c,d;}C[102*102],x,y;
    int dx[8]={-1,-1,0,1,1,1,0,-1},dy[8]={0,1,1,1,0,-1,-1,-1};

    int inc=0,sf=0;
    x.l=x0;x.c=y0;x.d=1;b[x0][y0]=1;
    C[inc]=x;
    while(inc<=sf)
    {
        x=C[inc++];
        for(int k=0;k<8;k++)
        {
            y.l=x.l+dx[k];
            y.c=x.c+dy[k];
            if(a[y.l][y.c]==' ' && b[y.l][y.c]==-1)
            {
                y.d=x.d+1;//cout<<y.l<<" "<<y.c<<" "<<y.d<<endl;
                b[y.l][y.c]=y.d;
                C[sf++]=y;
            }
        }
    }
}

int main()
{
    f>>n>>m;
    f.get();

    for(int i=1;i<=n;i++)
    {
        f.getline(a[i],102);
        for(int k=m-1;k>=0;k--)
        {
            a[i][k+1]=a[i][k];

            if(a[i][k+1]=='R')
            {
                xr=i;
                yr=k+1;
                a[i][k+1]=' ';
            }
            if(a[i][k+1]=='J')
            {
                xj=i;
                yj=k+1;
                a[i][k+1]=' ';
            }

            if((int)a[i][k]==0)
                a[i][k]=' ';

            r[i][k]=-1;
            j[i][k]=-1;
        }

        r[i][m]=-1;
        j[i][m]=-1;

        a[i][m+1]='\0';
    }

    for(int i=0;i<=n+1;i++)
        a[i][0]=a[i][m+1]='X',j[i][0]=j[i][m+1]=-2,r[i][0]=r[i][m+1]=-2;
    for(int i=0;i<=m+1;i++)
        a[0][i]=a[n+1][i]='X',j[0][i]=j[n+1][i]=-2,r[0][i]=r[n+1][i]=-2;

    lee(xj,yj,j);
    lee(xr,yr,r);

    int tmin=102*102,xmin=-1,ymin=-1;
    for(int i=1;i<=n;i++)
        for(int k=1;k<=m;k++)
            if(r[i][k]==j[i][k] && r[i][k]<tmin && r[i][k]!=-1)
                tmin=r[i][k],xmin=i,ymin=k;

    g<<tmin<<" "<<xmin<<" "<<ymin;

    for(int i=0;i<=n+1;i++)
    {
        for(int k=0;k<=m+1;k++)
            cout<<r[i][k]<<" ";
        cout<<endl;
    }
cout<<endl;
    for(int i=0;i<=n+1;i++)
    {
        for(int k=0;k<=m+1;k++)
            cout<<j[i][k]<<" ";
        cout<<endl;
    }
    //cout<<xr<<" "<<yr<<" "<<xj<<" "<<yj;
/*
    for(int i=0;i<=n+1;i++)
        cout<<a[i]<<endl;
*/
    return 0;
}