Cod sursa(job #796748)

Utilizator supermitelArdelean Razvan Mitel supermitel Data 12 octombrie 2012 14:23:35
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.29 kb
#include <cstdio>

int n,m,nr=1,nj=1;

struct cord
{
    int x,y,val;
}cr[5000], cj[5000];

struct matr
{
    int r,j;
}a[105][105];

void bordare(int n,int m)
{
    int i;
    for(i=0;i<=n+1;i++)
    {
        a[i][0].r=-1;
        a[i][m+1].r=-1;
        a[i][0].j=-1;
        a[i][m+1].j=-1;
    }
    for(i=0;i<=m+1;i++)
    {
        a[0][i].r=-1;
        a[n+1][i].r=-1;
        a[0][i].j=-1;
        a[n+1][i].j=-1;
    }
}

void citire()
{
    int i,j;
    char c;
    scanf("%d %d\n",&n,&m);
    bordare(n,m);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            scanf("%c",&c);
            if(c=='X'||c=='x')
            {
                a[i][j].r=-1;
                a[i][j].j=-1;
            }
            else if(c=='R'||c=='r')
            {
                cr[0].x=i;
                cr[0].y=j;
                a[n][m].r=1;
            }
            else if(c=='J'||c=='j')
            {
                cj[0].x=i;
                cj[0].y=j;
                a[n][m].j=1;
            }
        }
        scanf("%c",&c);
    }
}

int lee()
{
    int dir_x[8]={1,1,1,0,-1,-1,-1,0};
    int dir_y[8]={-1,0,1,1,1,0,-1,-1};
    int i,j;
    matr ret;

    for(i=0;;i++)
    {
        for(j=0;j<8;j++)
        {
            if(a[cr[i].x+dir_x[j]][cr[i].y+dir_y[j]].r==0)
            {
                cr[nr].x=cr[i].x+dir_x[j];
                cr[nr].y=cr[i].y+dir_y[j];
                a[cr[nr].x][cr[nr].y].r=a[cr[i].x][cr[i].y].r+1;
                nr++;
            }
        }
        for(j=0;j<8;j++)
        {
            if(a[cj[i].x+dir_x[j]][cj[i].y+dir_y[j]].j==0)
            {
                cj[nj].x=cj[i].x+dir_x[j];
                cj[nj].y=cj[i].y+dir_y[j];
                a[cj[nj].x][cj[nj].y].j=a[cj[i].x][cj[i].y].j+1;

                if(a[cj[nj].x][cj[nj].y].j==a[cj[nj].x][cj[nj].y].r)
                {
                    cj[nj].val=a[cj[nj].x][cj[nj].y].j;
                    return nj;
                }
                nj++;
            }
        }
    }
}

int main()
{
    int rasp,i,j;
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    citire();
    rasp= lee();

    printf("%d %d %d\n",cj[rasp].val+1,cj[rasp].x,cj[rasp].y);


    return 0;
}