Cod sursa(job #3168833)

Utilizator abelesefBurduhos Abel abelesef Data 13 noiembrie 2023 14:37:29
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.34 kb
#include <fstream>
#include <queue>
#include <utility>
#include <iostream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,ri,rj,ji,jj,lungime;
char ma[101][101];
string s;
queue<pair<int,int>> Q;
int dx[] = {-1,0,1,0,-1,-1,1,1},dy[] = {0,1,0,-1,-1,1,1,-1};

bool verif(int i,int j) {
        if (i < 1 || i > n || j < 1 || j > m) return 0;
        if (ma[i][j] != ' ') return 0;
        return 1;
}

void Lee(int istart,int jstart) {
        ma[istart][jstart] = '0';
        Q.push({istart,jstart});
        while(!Q.empty()) {
                int ci = Q.front().first,cj = Q.front().second;
                for (int k = 0;k<8;++k) {
                        int cci = ci + dx[k],ccj = cj + dy[k];
                        if (verif(cci,ccj)) {
                                ma[cci][ccj] = char(ma[ci][cj] + 1);
                                Q.push({cci,ccj});
                        }
                }
                Q.pop();
        }
}

void Traseu(int i,int j,int lg) {
        if (lg == (lungime + 1)/ 2) {
                fout<<lg<<" "<<i<<" "<<j;
        } else {
                int p = -1;
                for (int k = 0;k<7 && p == -1;++k) {
                        if (i + dx[k] >=1 && i + dx[k] <= n && j + dy[k] >=1 && j + dy[k] <= m)
                                if (ma[i][j] == ma[i + dx[k]][j + dy[k]] + 1)
                                        p = k;
                }
                Traseu(i + dx[p],j + dy[p],lg + 1);
        }
}

int main() {
        fin>>n>>m;
        getline(fin,s);
        for (int i = 1;i<=n;++i) {
                getline(fin,s);
                while (s.size() < m) s+=" ";
                for (int j = 1;j<=m;++j) {
                        ma[i][j] = s[j-1];
                        if (ma[i][j] == 'R') {
                                ri = i,rj = j;
                                ma[i][j] = ' ';
                        }
                        if (ma[i][j] == 'J') {
                                ji = i,jj = j;
                                ma[i][j] = ' ';
                        }
                }
        }
        Lee(ri,rj);
        lungime = ma[ji][jj] - 48 + 1;
        Traseu(ji,jj,1);
//        for (int i = 1;i<=n;++i) {
//                for (int j = 1;j<=m;++j) {
//                        cout<<ma[i][j];
//                }
//                cout<<endl;
//        }
        return 0;
}