Cod sursa(job #2587901)

Utilizator mihitudorMihalcea Tudor mihitudor Data 23 martie 2020 18:58:34
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.64 kb
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
struct ura {
    int l, c;
}coada[10001];
int rom[103][103], jul[103][103];
int dirL[8]={-1, -1, -1, 0, 1, 1, 1, 0};
int dirC[8]={-1, 0, 1, 1, 1, 0, -1, -1};
char s[103];
int main () {
    int n, m, i, j, inc, sf, lpr, cpr, lpj, cpj, k, lin, col, tmin;
    char c;
    fin>>n>>m;
    ///bordarea matricelor
    for(i=0; i<=n+1; i++) {
        rom[i][0]=rom[i][m+1]=-1;
        jul[i][0]=jul[i][m+1]=-1;
    }
    for(i=0; i<=m+1; i++) {
        rom[0][i]=rom[n+1][i]=-1;
        jul[0][i]=jul[n+1][i]=-1;
    }
    fin.get(c);
    ///formarea matricelor
    for(i=1; i<=n; i++) {
        fin.getline(s,103);
        for(k=1; k<=m; k++) {
            if(s[k-1]=='X') {
                rom[i][k]=-1;
                jul[i][k]=-1;
            }
            if(s[k-1]=='R') {
                rom[i][k]=1;
                jul[i][k]=0;
                lpr=i;
                cpr=k;
            }
            if(s[k-1]=='J') {
                rom[i][k]=0;
                jul[i][k]=1;
                lpj=i;
                cpj=k;
            }
            if(s[k-1]==' ') {
                rom[i][k]=0;
                jul[i][k]=0;
            }
        }
    }
    ///lee romeo
    inc=sf=1;
    coada[inc].l=lpr;
    coada[inc].c=cpr;
    while(inc<=sf) {
        for(i=0; i<8; i++) {
            lin=coada[inc].l+dirL[i];
            col=coada[inc].c+dirC[i];
            if(rom[lin][col]==0) {
                sf++;
                coada[sf].l=lin;
                coada[sf].c=col;
                rom[lin][col]=1+rom[coada[inc].l][coada[inc].c];
            }
        }
        inc++;
    }
    ///lee julieta
    inc=sf=1;
    coada[inc].l=lpj;
    coada[inc].c=cpj;
    while(inc<=sf) {
        for(i=0; i<8; i++) {
            lin=coada[inc].l+dirL[i];
            col=coada[inc].c+dirC[i];
            if(jul[lin][col]==0) {
                sf++;
                coada[sf].l=lin;
                coada[sf].c=col;
                jul[lin][col]=1+jul[coada[inc].l][coada[inc].c];
            }
        }
        inc++;
    }
    ///calculez timpul minim
    tmin=200000000;
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            if(rom[i][j]==jul[i][j] && rom[i][j]!=-1 && rom[i][j]!=0)
                if(rom[i][j]<tmin) {
                    tmin=rom[i][j];
                    lin=i;
                    col=j;
                }
    fout<<tmin<<" "<<lin<<" "<<col;
    /*for(i=1; i<=n; i++) {
        for(j=1; j<=m; j++)
            fout<<rom[i][j]<<" ";
        fout<<endl;
    }*/
    return 0;
}