Cod sursa(job #2300762)

Utilizator yo_andrei_2003Murica Andrei yo_andrei_2003 Data 11 decembrie 2018 22:48:21
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.25 kb
#include <cstdio>
using namespace std;

int hr[102][102], hj[102][102], ql[10000], qc[10000];
char dl[8]={-1, -1, 0, 1, 1, 1, 0, -1}, c;
char dc[8]={0, 1, 1, 1, 0, -1, -1, -1};

int main()
{
    int primul, ultimul, i, l, n, m, a, b, x, y, mini=1000000, pozl, pozc;
    FILE *fin, *fout;
    fin=fopen("rj.in" ,"r");
    fout=fopen("rj.out" ,"w");
    fscanf(fin, "%d %d\n" ,&n ,&m);
    for (i=0;i<=n+1;i++) {
        hr[i][0]=hr[i][m+1]=hj[i][0]=hj[i][m+1]=-1;
    }
    for (i=0;i<=m+1;i++) {
        hr[0][i]=hr[n+1][i]=hj[0][i]=hj[n+1][i]=-1;
    }
    for (i=1;i<=n;i++) {
        for (l=1;l<=m;l++) {
            c=fgetc(fin);
            if (c=='X') {
                hr[i][l]=hj[i][l]=-1;
            }
            if (c=='R') {
                a=i;
                b=l;
            }
            if (c=='J') {
                x=i;
                y=l;
            }
            if (c=='\n') {
                l=m+2;
            }
        }
        if (c!='\n') {
        c=fgetc(fin);
        }
        //fputc(c,fout);
    }
    hr[a][b]=1;
    ql[1]=a;
    qc[1]=b;
    primul=ultimul=1;
    while (primul<=ultimul) {
        for (i=0;i<8;i++) {
            if (hr[ql[primul]+dl[i]][qc[primul]+dc[i]]==0) {
                hr[ql[primul]+dl[i]][qc[primul]+dc[i]]=hr[ql[primul]][qc[primul]]+1;
                ultimul++;
                ql[ultimul]=ql[primul]+dl[i];
                qc[ultimul]=qc[primul]+dc[i];
            }
        }
        primul++;
    }
    hj[x][y]=1;
    ql[1]=x;
    qc[1]=y;
    primul=ultimul=1;
    while (primul<=ultimul) {
        for (i=0;i<8;i++) {
            if (hj[ql[primul]+dl[i]][qc[primul]+dc[i]]==0) {
                hj[ql[primul]+dl[i]][qc[primul]+dc[i]]=hj[ql[primul]][qc[primul]]+1;
                ultimul++;
                ql[ultimul]=ql[primul]+dl[i];
                qc[ultimul]=qc[primul]+dc[i];
            }
        }
        primul++;
    }
    for (i=1;i<=n;i++) {
        for (l=1;l<=m;l++) {
            if (hj[i][l]==hr[i][l] && hj[i][l]!=-1 && hj[i][l]<mini && hj[i][l]!=0) {
                mini=hj[i][l];
                pozl=i;
                pozc=l;
            }
        }
    }
    fprintf(fout, "%d %d %d" ,mini ,pozl ,pozc);
    return 0;
}