Cod sursa(job #1266182)

Utilizator BaweeLazar Vlad Bawee Data 18 noiembrie 2014 14:10:00
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.54 kb
#include <cstdio>

FILE*f=fopen("rj.in","r");
FILE*g=fopen("rj.out","w");

int n,m;
short lx,cx,ly,cy;
const short dl[]={0,-1,-1,0,+1,+1,+1,+0,-1};
const short dc[]={0,+0,+1,1,+1,+0,-1,-1,-1};
short x[102][102],y[102][102];
void out(short x[102][102])
{
    int i,j;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
            fprintf(g,"%4d ",x[i][j]);
    fprintf(g,"\n");
    }
    fprintf(g,"\n");
}
void citire()
{
    int i,j;
    char k[102];
    fscanf(f,"%d%d",&n,&m);
    fgets(k,2,f);
    for(i=1;i<=n;i++)
    {
        fgets(k,m+2,f);
        for(j=0;j<m;j++)
        {
            x[i][j+1]=y[i][j+1]=k[j];
            if(x[i][j+1]=='R')
                {lx=i;cx=j+1;}
            else if(x[i][j+1]=='J')
                {ly=i;cy=j+1;}
            else if(x[i][j+1]=='X')
                x[i][j+1]=y[i][j+1]=-1;
            else if(x[i][j+1]==' ')
                x[i][j+1]=y[i][j+1]=0;
        }
    }
}
void bord()
{
    int i;
    for(i=0;i<=n+1;i++)
        x[i][0]=x[i][m+1]=y[i][0]=y[i][m+1]=-1;
    for(i=0;i<=m+1;i++)
        x[0][i]=x[n+1][i]=y[0][i]=y[n+1][i]=-1;
}
void jaler()
{
    short cl[10003],cc[10003],in,sf,i,nl,nc,ccc,ll;
    in=sf=1;
    cl[1]=lx;
    cc[1]=cx;
    x[lx][cx]=1;
    while(in<=sf)
    {
        nl=cl[in];
        nc=cc[in];
        for(i=1;i<=8;i++)
        {
            ll=nl+dl[i];
            ccc=nc+dc[i];
            if(x[ll][ccc]==0)
            {
                sf++;
                cl[sf]=ll;
                cc[sf]=ccc;
                x[ll][ccc]=x[nl][nc]+1;
            }
        }
        in++;
    }
}
void jalej()
{
    short cl[10003],cc[10003],in,sf,i,nl,nc,ccc,ll;
    in=sf=1;
    cl[1]=ly;
    cc[1]=cy;
    y[ly][cy]=1;
    while(in<=sf)
    {
        nl=cl[in];
        nc=cc[in];
        for(i=1;i<=8;i++)
        {
            ll=nl+dl[i];
            ccc=nc+dc[i];
            if(y[ll][ccc]==0)
            {
                sf++;
                cl[sf]=ll;
                cc[sf]=ccc;
                y[ll][ccc]=y[nl][nc]+1;
            }
        }
        in++;
    }
}
int mini()
{
    int i,j,mn=0,lmn=0,cmn=0;
    mn=9999;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
            if(x[i][j]>0 and x[i][j]==y[i][j] and x[i][j]<mn)
            {
                mn=x[i][j];
                lmn=i;
                cmn=j;
            }
    }
    fprintf(g,"%d %d %d\n",mn,lmn,cmn);
}
int main()
{
    citire();
    bord();
    jaler();
    jalej();
    mini();
    return 0;
}