Cod sursa(job #2430437)

Utilizator AnastasiaStefanescuAnastasia Stefanescu AnastasiaStefanescu Data 14 iunie 2019 21:32:14
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.52 kb

#include <fstream>

using namespace std;

ifstream fin ("rj.in");
ofstream fout ("rj.out");

int main()
{
    int n, m, x[101][101], i, j, clin[10001], ccol[10001], k, p, auxr[101][101], minim, lj, cj, val, i2, j2, auxj[101][101];
    int l[9] = {-1, -1, -1, 0, 1, 1, 1, 0}, c[9] = {-1, 0, 1, 1, 1, 0, -1, -1};
    char a;
    
    fin >> n >> m;
    fin.get();
    for (i = 1; i<= n; i++)
    {
        for (j = 1; j<= m; j++)
        {
            a = fin.get();
            if(a == ' ')
                auxr[i][j] = auxj[i][j] = x[i][j] = 0;
            if(a == 'X')
                auxr[i][j] = auxj[i][j] = x[i][j] = -1;
            if(a == 'R')
            {
                x[i][j] = 0;
                auxr[i][j] = 1;
                k = 1;
                clin[1] = i;
                ccol[1] = j;
            }
            if(a == 'J')
            {
                x[i][j] = 0;
                auxj[1][j] = 1;
                lj = i;
                cj = j;
            }
        }
        fin.get();
    }
    
    //pt romeo
    while (k > 0)
    {
        val = auxr[clin[1]][ccol[1]];
        
        for (p = 1; p<= 8; p++)
        {
            i2 = clin[1] + l[p];
            j2 = ccol[1] + c[p];
            if(x[i2][j2] == 0 && auxr[i2][j2] == 0)
            {
                k++;
                clin[k] = i2;
                ccol[k] = j2;
                auxr[i2][j2] = val+1;
            }
        }
        
        for (i = 1; i<= k-1; i++)
        {
            clin[i] = clin[i+1];
            ccol[i] = ccol[i+1];
        }
        k--;
    }
    
    //pt julieta
    k = 1;
    clin[1] = lj;
    ccol[1] = cj;
    
    while (k > 0)
    {
        val = auxj[clin[1]][ccol[1]];
        
        for (p = 1; p<= 8; p++)
        {
            i2 = clin[1] + l[p];
            j2 = ccol[1] + c[p];
            if(x[i2][j2] == 0 && auxj[i2][j2] == 0)
            {
                k++;
                clin[k] = i2;
                ccol[k] = j2;
                auxj[i2][j2] = val+1;
            }
        }
        
        for (i = 1; i<= k-1; i++)
        {
            clin[i] = clin[i+1];
            ccol[i] = ccol[i+1];
        }
        k--;
    }
    
    //gasire punct de intalnire
    minim = 10002;
    i2 = 0;
    j2 = 0;
    for (i = 1; i<= n; i++)
        for (j = 1; j<= m; j++)
            if(auxr[i][j] == auxj[i][j] && auxr[i][j] > 0 && auxr[i][j] < minim)
            {
                minim = auxr[i][j];
                i2 = i;
                j2 = j;
            }
    
    fout << minim << " " << i2 << " " << j2;
    return 0;
}