Cod sursa(job #922328)

Utilizator a.raduAndrei Radu a.radu Data 22 martie 2013 08:22:49
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 4.28 kb
#include <cstdio>
#include <string.h>
using namespace std;
long a[105][105],b[105][105];
long n,m,i,y,lj,cj,lr,cr,mini,lp,cp;
char x;
char s[105];
void leer(long l, long c)
{
long s=0,d=0,aa[10001]={0},bb[10001]={0};
a[l][c]=1;
aa[1]=l;
bb[1]=c;
s=1;
d=1;
while (s<=d)
    {
    i=aa[s];
    y=bb[s];
    if (a[i-1][y]==0)
            {
            d++;
            aa[d]=i-1;
            bb[d]=y;
            a[i-1][y]=a[i][y]+1;
            }
    if (a[i-1][y-1]==0)
            {
            d++;
            aa[d]=i-1;
            bb[d]=y-1;
            a[i-1][y-1]=a[i][y]+1;
            }
    if (a[i][y-1]==0)
            {
            d++;
            aa[d]=i;
            bb[d]=y-1;
            a[i][y-1]=a[i][y]+1;
            }
    if (a[i-1][y+1]==0)
            {
            d++;
            aa[d]=i-1;
            bb[d]=y+1;
            a[i-1][y+1]=a[i][y]+1;
            }
    if (a[i+1][y-1]==0)
            {
            d++;
            aa[d]=i+1;
            bb[d]=y-1;
            a[i+1][y-1]=a[i][y]+1;
            }
    if (a[i+1][y]==0)
            {
            d++;
            aa[d]=i+1;
            bb[d]=y;
            a[i+1][y]=a[i][y]+1;
            }
    if (a[i][y+1]==0)
            {
            d++;
            aa[d]=i;
            bb[d]=y+1;
            a[i][y+1]=a[i][y]+1;
            }
    if (a[i+1][y+1]==0)
            {
            d++;
            aa[d]=i+1;
            bb[d]=y+1;
            a[i+1][y+1]=a[i][y]+1;
            }
    s++;
    }
}
void leej(long l, long c)
{
long s=0,d=0,aa[10001]={0},bb[10001]={0};
b[l][c]=1;
aa[1]=l;
bb[1]=c;
s=1;
d=1;
while (s<=d)
    {
    i=aa[s];
    y=bb[s];
    if (b[i-1][y]==0)
            {
            d++;
            aa[d]=i-1;
            bb[d]=y;
            b[i-1][y]=b[i][y]+1;
            }
    if (b[i-1][y-1]==0)
            {
            d++;
            aa[d]=i-1;
            bb[d]=y-1;
            b[i-1][y-1]=b[i][y]+1;
            }
    if (b[i][y-1]==0)
            {
            d++;
            aa[d]=i;
            bb[d]=y-1;
            b[i][y-1]=b[i][y]+1;
            }
    if (b[i-1][y+1]==0)
            {
            d++;
            aa[d]=i-1;
            bb[d]=y+1;
            b[i-1][y+1]=b[i][y]+1;
            }
    if (b[i+1][y-1]==0)
            {
            d++;
            aa[d]=i+1;
            bb[d]=y-1;
            b[i+1][y-1]=b[i][y]+1;
            }
    if (b[i+1][y]==0)
            {
            d++;
            aa[d]=i+1;
            bb[d]=y;
            b[i+1][y]=b[i][y]+1;
            }
    if (b[i][y+1]==0)
            {
            d++;
            aa[d]=i;
            bb[d]=y+1;
            b[i][y+1]=b[i][y]+1;
            }
    if (b[i+1][y+1]==0)
            {
            d++;
            aa[d]=i+1;
            bb[d]=y+1;
            b[i+1][y+1]=b[i][y]+1;
            }
    s++;
    }
}
int main()
{
freopen("rj.in","r",stdin);
freopen("rj.out","w",stdout);
scanf("%ld%ld\n",&n,&m);
for (i=0; i<=n+1; i++)
    {
    a[i][0]=-5;
    a[i][m+1]=-5;
    b[i][0]=-5;
    b[i][m+1]=-5;
    }
for (i=1; i<=m+1; i++)
    {
    a[0][i]=-5;
    a[n+1][i]=-5;
    b[0][i]=-5;
    b[n+1][i]=-5;
    }
for (i=1; i<=n; i++)
    {
    gets(s);
    for (y=1; y<=strlen(s); y++)
            {
            x=s[y-1];
            if (x=='J')
                    {
                    lj=i; cj=y;
                    a[i][y]=-2;
                    b[i][y]=-2;
                    }
            if (x=='R')
                    {
                    lr=i; cr=y;
                    a[i][y]=-3;
                    b[i][y]=-3;
                    }
            if (x=='X')
                    {
                    b[i][y]=-1;
                    a[i][y]=-1;
                    }
                }

    }
//for (i=1; i<=n; i++)
//    {
//    for (y=1; y<=m; y++)
//        printf("%d ",a[i][y]);
//    printf("\n");
//    }
leer(lr,cr);
leej(lj,cj);
mini=m*n;
for (i=1; i<=n; i++)
    for (y=1; y<=m; y++)
        if ((a[i][y]==b[i][y])&&(a[i][y]>0))
            if (a[i][y]<mini)
                {
                lp=i;
                cp=y;
                mini=a[i][y];
                }
printf("%ld %ld %ld",mini,lp,cp);
return 0;
}