Cod sursa(job #1611701)

Utilizator andreizaicescuAndrei Zaicescu andreizaicescu Data 24 februarie 2016 12:53:10
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.3 kb
#include <fstream>

using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int a[102][102], b[102][102], n, m ,xr, xj,yr,yj,i,j,dx[8]={-1,-1,-1,0,0,1,1,1},dy[8]={0,1,-1,-1,1,0,-1,1},xx,yy,in,sf,mini=10000000;
char x[102];
struct el{int x;int y;};
el z[100100];
int main()
{
    f>>n>>m;
    f.get();
    for(i=1;i<=n;i++)
    {
        f.getline(x,101);
        for(j=0;j<m;j++)
            if(x[j]==' ')
            {
                a[i][j+1]=0;
                b[i][j+1]=0;
            }
            else
                if(x[j]=='X')
            {
                a[i][j+1]=-1;
                b[i][j+1]=-1;
            }
            else
                if(x[j]=='R')
            {
                xr=i;
                yr=j+1;
            }
            else
            {
                xj=i;
                yj=j+1;
            }

    }
    for(i=0;i<=n+1;i++)
    {
        a[i][0]=-1;
        a[i][n+1]=0;
        b[i][0]=-1;
        b[i][n+1]=0;
    }
    for(i=1;i<=m;i++)
    {
        a[0][i]=-1;
        a[n+1][i]=-1;
        b[0][i]=-1;
        b[n+1][i]=-1;
    }
    in=1;sf=1;
    a[xr][yr]=1;
    z[1].x=xr;
    z[1].y=yr;
   while(in<=sf)
     {
        xr=z[in].x;
        yr=z[in].y;
            for(i=0;i<=7;i++)
         {
             xx=xr+dx[i];
             yy=yr+dy[i];
             if(a[xx][yy]==0)
             {
                sf++;
                 a[xx][yy]=a[xr][yr]+1;
                 z[sf].x=xx;
                 z[sf].y=yy;
             }
         }
         in++;
    }
     in=1;sf=1;
    b[xj][yj]=1;
    z[1].x=xj;
    z[1].y=yj;
   while(in<=sf)
     {
        xj=z[in].x;
        yj=z[in].y;
            for(i=0;i<=7;i++)
         {
             xx=xj+dx[i];
             yy=yj+dy[i];
             if(b[xx][yy]==0)
             {
                sf++;
                 b[xx][yy]=b[xj][yj]+1;
                 z[sf].x=xx;
                 z[sf].y=yy;
             }
         }
         in++;
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
            if(a[i][j]==b[i][j] and a[i][j]>0)
                if(a[i][j]<mini)
            {
                mini=a[i][j];
                xx=i;
                yy=j;
            }
    }
    g<<mini<<" "<<xx<<" "<<yy;
    return 0;
}