Cod sursa(job #2720502)

Utilizator popica312Pop David-Gabriel popica312 Data 10 martie 2021 21:48:31
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.97 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n, m, xr, yr, xj, yj;
int dl[8]={0, 1, 0, -1, -1, 1, -1, 1};
int dc[8]={1, 0, -1, 0, -1, 1,  1,-1};
char l[102][102];
int r[102][102];
void citire(void);
void afisare(int [102][102]);
void parcurge (int, int, int[102][102]);
int main()
{
    int j[102][102];
    citire();
    parcurge(xr, yr, r);
    parcurge(xj, yj, j);
    afisare(j);
    return 0;
}
void citire(void)
{
    int i, k;
    char c;
    fin>>n>>m;
    for(i = 0; i <= n + 1 ; i++) l[i][0]=l[i][m+1]='X';
    for(i = 0; i <= m + 1 ; i++) l[0][i]=l[n+1][i]='X';
    fin.get(c);
    for(i = 1 ; i <= n ; i++)
        {
            for(k = 1 ; k <= m ; k++)
            {
                fin.get(c);
                l[i][k]=c;
                if (l[i][k]=='R') {xr=i; yr=k; l[i][k]=' ';}
                if (l[i][k]=='J') {xj=i; yj=k; l[i][k]=' ';}
            }
            fin.get(c);
        }
    fin.close();
}

void parcurge (int x0, int y0, int d[102][102])
{
    struct Punct {int l, c;} C[10005], p;
    int inc = 0 , sf = 0 , i , k;
    for(i = 0 ; i <= n + 1 ; i++)
        for(k = 0 ; k <= m + 1 ; k++) d[i][k]=-1;
    C[0].l=x0; C[0].c=y0; d[x0][y0]=1;
    while(inc <= sf)
        {
             p=C[inc++];
             for (i=0; i<8; i++)
                if(l[p.l+dl[i]][p.c+dc[i]]==' ' && d[p.l+dl[i]][p.c+dc[i]]==-1)
                    {
                        d[p.l+dl[i]][p.c+dc[i]]=1+d[p.l][p.c];
                        C[++sf].l=p.l+dl[i];
                        C[sf].c=p.c+dc[i];
                    }
        }
}
void afisare(int j[102][102])
{
    int tmin=102*102+5, xmin=-1, ymin=-1, i, k;
    for(i = 1 ; i <= n ; i++)
        for(k = 1; k <= m ; k++)
            if(r[i][k]==j[i][k])
                if(r[i][k]<tmin && r[i][k]!=-1)
                    {tmin=r[i][k]; xmin=i; ymin=k;}
    fout<<tmin<<' '<<xmin<<' '<<ymin<<endl;
    fout.close();
}