Cod sursa(job #1023438)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 6 noiembrie 2013 22:45:19
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.21 kb
#include <cstdio>
using namespace std;

char x[101][101];
int i,j,ir,jr,ij,jj,n,m,iv,jv,ic,jc,p,u,minim,imin,jmin,ok,d;
int di[]={-1,-1,-1, 0, 0, 1, 1, 1};
int dj[]={-1, 0, 1,-1, 1,-1, 0, 1};
int ro[101][101],ju[101][101], c[3][10001];

int main () {

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

    scanf ("%d%d", &n,&m);
    scanf ("\n");
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            scanf("%c",&x[i][j]);
            if (x[i][j] == 'R'){
                ir = i;
                jr = j;
            }
            if (x[i][j] == 'J'){
                ij=i;
                jj=j;
            }
        }
        scanf("\n");
    }
    for (i=1;i<=n;i++) {
        for (j=1;j<=m;j++) {
            if (x[i][j]== 'R' ) {
                ro[i][j]=1;
                ju[i][j]=0;
            }
            if (x[i][j]== 'J' ) {
                ro[i][j]=0;
                ju[i][j]=1;
            }
            if (x[i][j]=='X')
                ro[i][j]=ju[i][j]=-1;
        }
    }
    p=u=1;
    c[0][1]=ir;
    c[1][1]=jr;

    while (p<=u) {

        ic=c[0][p];
        jc=c[1][p];
        for (d=0;d<=7;d++) {
            iv=ic+di[d];
            jv=jc+dj[d];
            if (iv>=1&&iv<=n&&jv>=1&&jv<=m&&ro[iv][jv]==0) {
                u++;
                c[0][u]=iv;
                c[1][u]=jv;
                ro[iv][jv]=ro[ic][jc]+1;
            }
        }
        p++;
    }
    p=u=1;
    c[0][1]=ij;
    c[1][1]=jj;

    while (p<=u) {

        ic=c[0][p];
        jc=c[1][p];
        for (d=0;d<=7;d++) {
            iv=ic+di[d];
            jv=jc+dj[d];
            if (iv>=1&&iv<=n&&jv>=1&&jv<=m&&ju[iv][jv]==0) {
                u++;
                c[0][u]=iv;
                c[1][u]=jv;
                ju[iv][jv]=ju[ic][jc]+1;
            }
        }
        p++;
    }
    minim = n*m +100;
    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]<minim){
                    minim=ro[i][j];
                    imin=i;
                    jmin=j;
                }
    printf ("%d %d %d\n" , minim , imin ,jmin);
    return 0;

}