Cod sursa(job #1374409)

Utilizator dezenStefan Brasoveanu dezen Data 5 martie 2015 09:04:42
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.26 kb
#include<cstdio>
using namespace std;
int n,m,i,j,romeo[101][101],julieta[101][101],dl[]={-1,0,1,0},dc[]={0,1,0,-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("\n");
    }
    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<4;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<4;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++)
        {
            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",c1,c2,tmin-1);
    return 0;
}