Cod sursa(job #498083)

Utilizator TowelieMilea Raluca Gabriela Towelie Data 3 noiembrie 2010 23:04:20
Problema Rj Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <stdio.h>
#include <string.h>
char a[100][100];
    int rm[100][100],jm[100][100],rj,ri,ji,jj,n,m,min;
int pi[10]={0,1,1,1,0,-1,-1,-1},
    pj[10]={-1,-1,0,1,1,1,0,-1},inc,sf,i,j,k,qi[10000],qj[10000];
void lee(int I,int J,int mat[100][100])
{
    qi[0]=I;
    qj[0]=J;

    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            mat[i][j]=-1;
    mat[I][J]=1;

    inc=0;
    sf=0;
    while(inc<=sf)
    {
        for(k=0;k<8;k++)
        {
            i=qi[inc]+pi[k];
            j=qj[inc]+pj[k];
            if(a[i][j]!='X' && mat[i][j]==-1)
            {
                mat[i][j]=mat[qi[inc]][qj[inc]]+1;
                qi[++sf]=i;
                qj[sf]=j;
            }
        }
        inc++;
    }
}


int main()
{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);


    scanf("%d%d\n",&n,&m);
    for(i=0;i<n;i++)
    {
        gets(a[i]);
        for(j=0;j<m;j++)
            if(a[i][j]=='J'){rj=j;ri=i;}
            else if(a[i][j]=='R'){jj=j;ji=j;}
    }
    for(i=0;i<n;i++)
        printf("%s\n",a[i]);

    lee(ri,rj,rm);
    lee(ji,jj,jm);
    min=n*m;
    for(i=0;i<n;i++)
        {for(j=0;j<m;j++)
            {if(rm[i][j]!=-1 && rm[i][j]==jm[i][j] && min>rm[i][j]){min=rm[i][j];ri=i;rj=j;}
            printf("%d ",rm[i][j]);

            }
            printf("\n");
        }
    printf("\n%d %d %d",min,ri+1,rj+1);
    return 0;
}