Cod sursa(job #1374641)

Utilizator dezenStefan Brasoveanu dezen Data 5 martie 2015 10:21:27
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.4 kb
#include<cstdio>
using namespace std;
int n,m,i,j,romeo[102][102],julieta[101][101],dl[]={-1,-1,0,1,1,1,0,-1},dc[]={0,1,1,1,0,-1,-1,-1},x,y,k,p,u,tmin=10000,c1,c2;
char c;
struct coada
{
    int l;
    int c;
}Cr[100000],Cj[100000];
int main()
{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    scanf("%d%d\n",&n,&m);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            c=' ';
            scanf("%c",&c);
            if(c=='R')
            {
                romeo[i][j]=1;
                Cr[0].l=i;
                Cr[0].c=j;
                julieta[i][j]=0;
            }
            if(c==' ')
            {
                romeo[i][j]=julieta[i][j]=0;
            }
            if(c=='X')
            {
                romeo[i][j]=julieta[i][j]=-1;
            }
            if(c=='J')
            {
                julieta[i][j]=1;
                Cj[0].l=i;
                Cj[0].c=j;
                romeo[i][j]=0;
            }
        }
        scanf("%c",&c);
    }
    for(i=0;i<=n+1;i++)
    {
        romeo[i][0]=julieta[i][0]=romeo[i][m+1]=julieta[i][m+1]=-1;
    }
    for(j=0;j<=m+1;j++)
    {
        romeo[0][j]=julieta[0][j]=romeo[n+1][j]=julieta[n+1][j]=-1;
    }
    while(p<=u)
    {
        x=Cr[p].l;
        y=Cr[p].c;
        p++;
        for(k=0;k<8;k++)
        {
            if(romeo[x+dl[k]][y+dc[k]]==0)
            {
                u++;
                romeo[x+dl[k]][y+dc[k]]=romeo[x][y]+1;
                Cr[u].l=x+dl[k];
                Cr[u].c=y+dc[k];
            }
        }
    }
    p=u=0;
    while(p<=u)
    {
        x=Cj[p].l;
        y=Cj[p].c;
        p++;
        for(k=0;k<8;k++)
        {
            if(julieta[x+dl[k]][y+dc[k]]==0)
            {
                u++;
                julieta[x+dl[k]][y+dc[k]]=julieta[x][y]+1;
                Cj[u].l=x+dl[k];
                Cj[u].c=y+dc[k];
            }
        }
    }
//    for(i=1;i<=n;i++)
//    {
//        for(j=1;j<=m;j++)printf("%d ",romeo[i][j]);
//        printf("\n");
//    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(romeo[i][j]==julieta[i][j]&&romeo[i][j]<tmin&&romeo[i][j]>1)
            {
                tmin=romeo[i][j];
                c1=i;
                c2=j;
            }
        }
    }
    printf("%d %d %d",tmin,c1,c2);
    return 0;
}