Nu aveti permisiuni pentru a descarca fisierul grader_test3.in

Cod sursa(job #1945856)

Utilizator ioana.jianuIoana Jianu ioana.jianu Data 29 martie 2017 18:33:28
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.36 kb
#include <iostream>
#include <stdio.h>

using namespace std;

struct v{
    int lin,col;
};

v coada[10001];
int julieta[101][101],romeo[101][101];
int linie[]={-1,-1,0,1,1,1,0,-1};
int colo[]={0,1,1,1,0,-1,-1,-1};

int main(){

    FILE *fin,*fout;
    fin=fopen("rj.in","r");
    fout=fopen("rj.out","w");

    int n,m,i,xr,xj,yr,yj,in,sf,lc,cc,l,c,lf,cf,minim,j;
    char ch,inutil;

    fscanf(fin,"%d%d%c",&n,&m,&inutil);


    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            fscanf(fin,"%c",&ch);
            if(ch=='X')
                romeo[i][j]=julieta[i][j]=-1;
            if(ch=='R'){
                xr=i;
                yr=j;
            }
            if(ch=='J'){
                xj=i;
                yj=j;
            }
        }
        fscanf(fin,"%c",&inutil);
    }

    for(i=0;i<=m+1;i++)
        romeo[0][i]=romeo[n+1][i]=julieta[0][i]=julieta[n+1][i]=-1;
    for(i=0;i<=n+1;i++)
        romeo[i][0]=romeo[i][m+1]=julieta[i][0]=julieta[i][m+1]=-1;


    coada[1].lin=xr;
    coada[1].col=yr;
    romeo[xr][yr]=1;
    in=sf=1;

    while(in<=sf){
        for(i=0;i<8;i++){
            lc=coada[in].lin+linie[i];
            cc=coada[in].col+colo[i];
            if(romeo[lc][cc]==0){
                sf++;
                coada[sf].lin=lc;
                coada[sf].col=cc;
                romeo[lc][cc]=romeo[coada[in].lin][coada[in].col]+1;
            }
        }
        in++;
    }

    coada[1].lin=xj;
    coada[1].col=yj;
    julieta[xj][yj]=1;
    in=sf=1;

    while(in<=sf){
        for(i=0;i<8;i++){
            lc=coada[in].lin+linie[i];
            cc=coada[in].col+colo[i];

            if(julieta[lc][cc]==0){
                sf++;
                coada[sf].lin=lc;
                coada[sf].col=cc;
                julieta[lc][cc]=julieta[coada[in].lin][coada[in].col]+1;
            }
        }
        in++;
    }

    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(julieta[i][j]!=romeo[i][j]||julieta[i][j]<1)
                julieta[i][j]=10001;

    minim=10001;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(julieta[i][j]<minim){
                minim=julieta[i][j];
                lf=i;
                cf=j;
            }

    fprintf(fout,"%d %d %d",lf,cf,minim);

    fclose(fin);
    fclose(fout);

    return 0;
}