Cod sursa(job #1593005)

Utilizator andreigasparoviciAndrei Gasparovici andreigasparovici Data 8 februarie 2016 11:02:45
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <stdio.h>
#include <string.h>
char a[100][101];
int b[100][100],c[100][100],n,m;
struct Punct
{
    int i,j;
}Romeo,Julieta;
Punct getPunct(int i,int j)
{
    Punct p;
    p.i=i;
    p.j=j;
    return p;
}
int di[]={0,1,0,-1};
int dj[]={1,0,-1,0};
Punct coada[100*100];
void lee1()
{
    int inc=0,sf=-1;
    coada[++sf]=getPunct(Romeo.i,Romeo.j);
    int i,j,ni,nj;
    while(inc<=sf)
    {
        i=coada[inc].i;
        j=coada[inc].j;
        ++inc;
        for(int d=0;d<4;d++)
        {
            ni=i+di[d];
            nj=j+dj[d];
            if(ni>=0 && ni<n && nj>=0 && nj<m && a[ni][nj]!='X' && b[ni][nj]<1)
            {
                b[ni][nj]=b[i][j]+1;
                coada[++sf]=getPunct(ni,nj);
            }
        }
    }
}
void lee2()
{
    int inc=0,sf=-1;
    coada[++sf]=getPunct(Julieta.i,Julieta.j);
    int i,j,ni,nj;
    while(inc<=sf)
    {
        i=coada[inc].i;
        j=coada[inc].j;
        ++inc;
        for(int d=0;d<4;d++)
        {
            ni=i+di[d];
            nj=j+dj[d];
            if(ni>=0 && ni<n && nj>=0 && nj<m && a[ni][nj]!='X' && c[ni][nj]<1)
            {
                c[ni][nj]=c[i][j]+1;
                coada[++sf]=getPunct(ni,nj);
                if(c[ni][nj]==b[ni][nj])
                {
                    printf("%d %d %d",c[ni][nj],ni+1,nj+1);
                    return;
                }
            }
        }
    }
}
int main()
{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    scanf("%d %d ",&n,&m);
    for(int i=0;i<n;i++){
        gets(a[i]);
        char *p=strchr(a[i],'R');
        if(p)
        {
            Romeo.i=i;
            Romeo.j=p-a[i];
        }
        p=strchr(a[i],'J');
        if(p)
        {
            Julieta.i=i;
            Julieta.j=p-a[i];
        }
    }
    lee1();
    lee2();
    return 0;
}