Cod sursa(job #1843329)

Utilizator pionierul22aNa LiZa pionierul22 Data 8 ianuarie 2017 16:49:55
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.74 kb
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int i,j,m,n,xr,yr,xj,yj;
int r[1000][1000],u[1000][1000];
struct coada
{
    int l;
    int c;
    int d;
};
coada c[4000];
int dl[]={1,0,-1,0,-1,-1,1,1};
int dc[]={0,-1,0,1,1,-1,1,-1};

void lee(int a[1000][1000],int z,int hq)
{
    int i,j,in,jn,h,p,u;
    a[z][hq]=1;
    p=u=1;
    c[1].l=z;
    c[1].c=hq;
    while(p<=u)
    {
        i=c[p].l;
        j=c[p].c;
        for(h=0;h<7;h++)
        {
            in=i+dl[h];
            jn=j+dc[h];
            if(in>0 && jn>0 && in<n+1 && jn<m+1 && a[in][jn]==0)
            {
                a[in][jn]=a[i][j]+1;
                u++;
                c[u].l=in;
                c[u].c=jn;
            }
        }
        p++;
    }
}

void drum_minim()
{
    int i,j,tmin=101*101,xmin,ymin;
    xmin=ymin=1;
    for(i=1; i<=n; ++i)
        for(j=1; j<=m; ++j)
            if(r[i][j]==u[i][j]&&r[i][j]>0&&r[i][j]<tmin)
            {
                tmin=r[i][j];
                xmin=i;
                ymin=j;
            }
    fout<<tmin<<" "<<xmin<<" "<<ymin;
}

int main()
{
    fin>>n>>m;
    int i,j;
    fin.get();
    char ch[102];
     for(i=1; i<=n; ++i)
    {
        fin.get(ch,102);
        for(j=1; j<=m; ++j)
        {

            if(ch[j-1]=='R')
            {
                xr=i;      yr=j;
            }
            else if(ch[j-1]=='J')
            {
                xj=i;       yj=j;
            }
            else if(ch[j-1]=='X')
            {
                r[i][j]=-1;       u[i][j]=-1;
            }

        }

    fin.get();
    }

       lee(r,xr,yr);
        lee(u,xj,yj);
         drum_minim();

    return 0;
}