Cod sursa(job #1023432)

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

char x[101][101];
int i,j,ir,jr,ij,jj,n,m,iv,jv,ic,jc,p,ur,uj,ok,d,c;
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], cr[3][10001],cj[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=ur=uj=1;
    cr[0][1]=ir;
    cr[1][1]=jr;
    cj[0][1]=ij;
    cj[1][1]=jj;

    while ( ok==0) {

        ic=cr[0][p];
        jc=cr[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) {
                ur++;
                cr[0][ur]=iv;
                cr[1][ur]=jv;
                ro[iv][jv]=ro[ic][jc]+1;
                if (ju[iv][jv]==ro[iv][jv]) {
                    ok=1;
                    break;
                }
            }
        }

        ic=cj[0][p];
        jc=cj[1][p];
        for (d=0;d<=7&&ok==0;d++) {
            iv=ic+di[d];
            jv=jc+dj[d];
            if (iv>=1&&iv<=n&&jv>=1&&jv<=m&&ju[iv][jv]==0) {
                uj++;
                cj[0][uj]=iv;
                cj[1][uj]=jv;
                ju[iv][jv]=ju[ic][jc]+1;
                if (ju[iv][jv]==ro[iv][jv]) {
                    ok=1;
                    break;
                }
            }
        }
        p++;
    }

    printf ("%d %d %d\n" , ju[iv][jv], iv,jv);
    return 0;

}