Cod sursa(job #1653278)

Utilizator miruna999Morarasu Miruna miruna999 Data 15 martie 2016 20:40:52
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.11 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],c;
short int r[102][102],j[102][102];

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

    int prim=0,ultim=0;
    C[0].l=x0;C[0].c=y0;d[x0][y0]=1;
    while(prim<=ultim)
    {
        p=C[prim++];
        for(int k=0;k<8;k++)
            if(a[p.l+dx[k]][p.c+dy[k]]==' ' && d[p.l+dx[k]][p.c+dy[k]]==-1)
            {
                d[p.l+dx[k]][p.c+dy[k]]=1+d[p.l][p.c];
                C[ultim++].l=p.l+dx[k];
                C[ultim].c=p.c+dy[k];
            }
    }
}

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]=='R')
            {
                xr=i;
                yr=k+1;
                a[i][k]=' ';
            }
            if(a[i][k]=='J')
            {
                xj=i;
                yj=k+1;
                a[i][k]=' ';
            }

            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]=-1,r[i][0]=r[i][m+1]=-1;
    for(int i=0;i<=m+1;i++)
        a[0][i]=a[n+1][i]='X',j[0][i]=j[n+1][i]=-1,r[0][i]=r[n+1][i]=-1;

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

    int tmin=102*102,xmin,ymin;
    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<<j[i][k]<<" ";
        cout<<endl;
    }
    //cout<<xr<<" "<<yr<<" "<<xj<<" "<<yj;

    for(int i=0;i<=n+1;i++)
        cout<<a[i]<<endl;
*/
    return 0;
}