Cod sursa(job #1655668)

Utilizator CodrutLemeniCodrut Lemeni CodrutLemeni Data 18 martie 2016 10:20:46
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.49 kb
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define N 101

using namespace std;


struct poz{
    int l,c;
};

struct poz que[N*N],rom,jul;
int lin,col,head,tail,r[N][N],mj[N][N];

void enq(struct poz t){
    que[head++]=t;
}

struct poz deq(){
    return que[tail++];
};

void printmatr(){
    int i,j;

    for(i=0;i<lin;i++){
        for(j=0;j<col;j++){
            printf("%5d ",r[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}
void printmatj(){
    int i,j;

    for(i=0;i<lin;i++){
        for(j=0;j<col;j++){
            printf("%5d ",mj[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}


void lee(struct poz t,int m[N][N]){
    int i,j,l,c;

    head=tail=0;
    enq(t);
    while(head>tail){
        t=deq();
        l=t.l;
        c=t.c;

        for(i=-1;i<=1;i++){
            for(j=-1;j<=1;j++){
                if(i==0 && j==0){
                    continue;
                }
                if(l+i<lin && l+i>=0 && c+j<col && c+j>=0 && m[l][c]+1<m[l+i][c+j] ){
                    m[l+i][c+j]=m[l][c]+1;
                    t.l=i+l;
                    t.c=j+c;
                    enq(t);
                }
            }
        }


    }

}


int main(){
    int i,j,imin,jmin,tmin;
    char ch;

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

    scanf("%d %d",&lin,&col);

    scanf("%c",&ch);
    for(i=0;i<lin;i++){
        for(j=0;j<col;j++){
            scanf("%c",&ch);
            if(ch==' ' || ch=='0'){
                r[i][j]=N*N;
                mj[i][j]=N*N;
            }else if(ch=='R'){
                r[i][j]=0;
                mj[i][j]=N*N;
                rom.l=i;
                rom.c=j;
            }else if(ch=='J'){
                mj[i][j]=0;
                r[i][j]=N*N;
                jul.l=i;
                jul.c=j;
            }else if(ch=='X'){
                r[i][j]=mj[i][j]=-1;
            }
        }
        scanf("%c",&ch);
    }

    lee(rom,r);

    lee(jul,mj);


    tmin=N*N;


    for(i=0;i<lin;i++){
        for(j=0;j<col;j++){
            if(r[i][j]==-1 || mj[i][j]==-1){
                continue;
            }
            if(r[i][j]==mj[i][j] && tmin>r[i][j]){
                tmin=r[i][j];
                imin=i;
                jmin=j;
            }
        }
    }
    printf("%d %d %d",imin+1,jmin+1,tmin+1);

//    printmatr();
//    printmatj();
    return 0;
}