Cod sursa(job #2951097)

Utilizator carinamariaCarina Maria Viespescu carinamaria Data 5 decembrie 2022 12:21:34
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.19 kb
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int i, j, n, m, st, dr, minim, mini, minj, inou, jnou, icurr, jcurr, i1, j1, i2, j2, k;
int R[102][102], J[102][102];
pair <int, int> a[10002];
int di[] = { 1, 1, 1,-1,-1,-1, 0, 0};
int dj[] = { 0, 1,-1, 0, 1,-1, 1,-1};
char s[105];
bool inmat(int i, int j){
    if(i>=1 && i<=n && j>=1 && j<=m)
        return 1;
    return 0;

}
int main() {
    fin>>n>>m;
    fin.get();
    for(i=1;i<=n;i++){
        fin.getline(s+1, 105);
        for(j=1;j<=m;j++){
            if(s[j]=='X')
                R[i][j]=-1, J[i][j]=-1;
            else
                R[i][j]=0, J[i][j]=0;
            if(s[j]=='R')
                i1=i, j1=j;
            if(s[j]=='J')
                i2=i, j2=j;
            }
    }
    st=1;
    dr=1;
    a[st].first=i1;
    a[st].second=j1;
    R[i1][j1]=1;
    while(st<=dr){
        icurr=a[st].first;
        jcurr=a[st].second;
        st++;
        for(k=0;k<8;k++){
            inou=di[k]+icurr;
            jnou=dj[k]+jcurr;
            ///fout<<inou<<" "<<jnou<<" "<<R[inou][jnou]<<"\n";
            if(R[inou][jnou]==0 && inmat(inou, jnou)){
                dr++;
                a[dr].first=inou;
                a[dr].second=jnou;
                R[inou][jnou]=R[icurr][jcurr]+1;
            }
        }
    }

    st=1;
    dr=1;
    a[st].first=i2;
    a[st].second=j2;
    J[i2][j2]=1;
    while(st<=dr){
        icurr=a[st].first;
        jcurr=a[st].second;
        st++;
        for(k=0;k<8;k++){
            inou=di[k]+icurr;
            jnou=dj[k]+jcurr;
            if(J[inou][jnou]==0 && inmat(inou, jnou)){
                dr++;
                a[dr].first=inou;
                a[dr].second=jnou;
                J[inou][jnou]=J[icurr][jcurr]+1;
            }
        }
    }
    minim=10002;
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            ///fout<<R[i][j]<<" "<<i<<" "<<j<<"\n";
            if(R[i][j]>0 && R[i][j]==J[i][j] && J[i][j]<minim){

                minim=R[i][j];
                mini=i;
                minj=j;
            }
        }
    }
    fout<<minim<<" "<<minim<<" "<<minj;

}