Cod sursa(job #1516294)

Utilizator raduzxstefanescu radu raduzx Data 2 noiembrie 2015 22:18:33
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.97 kb
#include <fstream>

using namespace std;
long long a[105][105],b[105][105],c[100005],d[100005],t,n,m;
 ifstream f("rj.in");
    ofstream g("rj.out");
int x[]={-1,-1,0,1,1,1,0,-1};
int y[]={0,1,1,1,0,-1,-1,-1};
void bordare( )
{
    int i,j;
    for(i=0;i<=n+1;i++)
    {
        a[i][m+1]=-1;
        a[i][0]=-1;
    }
    for(i=0;i<=m+1;i++)
    {
        a[0][i]=-1;
        a[n+1][i]=-1;
    }
}
void leer(int o)
{
    long long i,x1,y1;
    if(o<=t)
    {for(i=0;i<=7;i++)
    {
        x1=c[o]+x[i];
        y1=d[o]+y[i];
        if(a[x1][y1]==0)
        {
           t++;
           a[x1][y1]=a[c[o]][d[o]]+1;
           c[t]=x1;
           d[t]=y1;

        }
    }
    leer(o+1);}
}
void leej(int o)
{
    int i,x1,y1;
    if(o<=t)
    {for(i=0;i<=7;i++)
    {
        x1=c[o]+x[i];
        y1=d[o]+y[i];
        if(b[x1][y1]==0)
        {
           t++;
           c[t]=x1;
           d[t]=y1;
           b[x1][y1]=b[c[o]][d[o]]+1;
        }
    }
    leej(o+1);}
}
void co()
{
    int minim=1000000,i1,j1,i,j;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(a[i][j]==b[i][j] and minim>=a[i][j])
            {
                if(minim>a[i][j] and a[i][j]>=1)
                {
                    minim=a[i][j];
                    i1=i;
                    j1=j;
                }
                else
                {
                    if(i1>i and j1>j)
                    {
                        i1=i;
                        j1=j;
                    }
                    else
                        if(i1==i)
                        {
                            if(j1>j)
                                j1=j;
                        }
                }
            }

        }
    }
    g<<a[i1][j1]<<" "<<i1<<" "<<j1;
}
int main()
{

    int i,j,i1,i2,j1,j2;
    char e[105];
    f>>n;
    f>>m;
    bordare( );
    f.get();
    for(i=1;i<=n;i++)
    {
        f.get(e,102);
       // g<<e<<'\n';
        f.get();
        j=0;
        while(e[j])
        {
            if(e[j]=='X')
                a[i][j+1]=-1;
            else
                if(e[j]=='R')
            {
                i1=i;
                j1=j+1;
            }
            else
                if(e[j]=='J')
            {
                i2=i;
                j2=j+1;
            }
            j++;
        }
    }
    for(i=0;i<=n+1;i++)
        for(j=0;j<=m+1;j++)
            b[i][j]=a[i][j];
   /* for(i=0;i<=n+1;i++)
    {
        for(j=0;j<=m+1;j++)
            g<<a[i][j]<<' ';
        g<<'\n';
    }*/
   a[i1][j1]=1;
    b[i2][j2]=1;
   // g<<i1<<" "<<j1<<" "<<i2<<" "<<j2<<'\n';
    t=1;
    c[1]=i1;
    d[1]=j1;
    leer(1);

    t=1;
    c[1]=i2;
    d[1]=j2;
    leej(1);
    /*for(i=0;i<=n+1;i++)
    {
        for(j=0;j<=m+1;j++)
            g<<b[i][j]<<' ';
        g<<'\n';
    }*/
    co();
    f.close();
    g.close();
    return 0;
}