Cod sursa(job #1401959)

Utilizator RaduToporanRadu Toporan RaduToporan Data 26 martie 2015 11:21:18
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <cstdio>

int n,m,i,j,x1,x2,y1,y2,a[105][105],b[105][105];
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
char s[105];

void citire()
{
    scanf("%d%d\n",&n,&m);
    for (i=1; i<=n; i++)
    {
        fgets(s,105,stdin);
        for (j=0; j<m; j++)
            if (s[j]=='X') b[i][j+1]=a[i][j+1]=-1;
        else if (s[j]=='R') { x1=i; y1=j+1;}
            else if (s[j]=='J') { x2=i; y2=j+1; }
    }
}

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

void afisare()
{
    int minim=2000000,pozx,pozy;
    for (int i=1; i<=n; i++)
        for (int j=1; j<=m; j++)
        if ((a[i][j]>0)&&(a[i][j]==b[i][j])&&(a[i][j]<minim))
    {
        minim=a[i][j];
        pozx=i;
        pozy=j;
    }
    printf("%d %d %d\n",minim,pozx,pozy);
}

void Lee(int xi, int yi, int a[105][105])
{
    struct coada
    {
        int l,c;
    };
    coada c[10100];
    int ic,sc;
    ic=1; sc=1;
    c[1].l=xi;
    c[1].c=yi;
    while (ic<=sc)
    {
        coada t=c[ic];
        ic++;
        for (int i=0; i<=3; i++)
        {
            int xn=t.l+dx[i];
            int yn=t.c+dy[i];
            if (a[xn][yn]==0)
            {
                a[xn][yn]=a[t.l][t.c]+1;
                sc++;
                c[sc].l=xn;
                c[sc].c=yn;
            }
        }
    }
}

int main()
{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    citire();
    bordare(a);bordare(b);
    Lee(x1,y1,a);
    Lee(x2,y2,b);
    afisare();
    return 0;
}