Cod sursa(job #1339066)

Utilizator dobrebogdanDobre Bogdan Mihai dobrebogdan Data 10 februarie 2015 17:32:45
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.69 kb
#include<cstdio>
#include<cstring>
char a[105][105];
int ju[105][105],ro[105][105];
int lx[12]={1,1,1,0,0,-1,-1,-1};
int ly[12]={1,0,-1,1,-1,1,0,-1};
int l;
struct sp
{
    int x,y;
}v[1000005];
void dfs(int x,int y)
{
    int st,dr,i;
        sp tm,tn;
        tm.x=x;tm.y=y;
    st=dr=1;v[1]=tm;
    while(st<=dr)
    {
        tm=v[st];
            for(i=0;i<=7;i++)
            if(ju[tm.x+lx[i]][tm.y+ly[i]]==0 && a[tm.x+lx[i]][tm.y+ly[i]]==1)
            {
               ju[tm.x+lx[i]][tm.y+ly[i]]=ju[tm.x][tm.y]+1;
               tn.x=tm.x+lx[i];tn.y=tm.y+ly[i];
               dr++;
               v[dr]=tn;
            }
            st++;
    }
}
int main()
{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    int n,m,i,j,xr,yr,xj,yj,tm,xm,ym,l;
    tm=30000000;
    scanf("%d%d\n",&n,&m);
    for(i=1;i<=n;i++)
    {
    gets(a[i]+1);
    l=strlen(a[i]+1);
    if(l<m)
    for(j=l+1;j<=m;j++)
    a[i][j]=' ';
    for(j=1;j<=m;j++)
    {
    if(a[i][j]=='R')
    {
    xr=i;
    yr=j;
    }
    if(a[i][j]=='J')
    {
        xj=i;
        yj=j;
    }
    if(a[i][j]==' ')
    a[i][j]=1;
    else
    a[i][j]=0;
    }
    }
    dfs(xr,yr);
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    {
    ro[i][j]=ju[i][j];
    ju[i][j]=0;
    }
        dfs(xj,yj);
        for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        if(ro[i][j]==ju[i][j] && ro[i][j]>0)
        {
            if(ro[i][j]<tm || (ro[i][j]==tm && i<xm) || (ro[i][j]==tm && i==xm && j<ym))
            {
                tm=ro[i][j];
                xm=i;
                ym=j;
            }
        }
        printf("%d %d %d\n",tm+1,xm,ym);
    return 0;
}