Cod sursa(job #2433177)

Utilizator marinaoprOprea Marina marinaopr Data 26 iunie 2019 11:01:44
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.87 kb

#include <fstream>
#include <iostream>
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;
   // a = fin.get(); // citeste mai intai '\r'
    a = fin.get(); // citeste mai intai '\n'
    for (i = 1; i<= n; i++)
    {
        for (j = 1; j<= m; j++)
        {
            a = fin.get();
          //  fout<<a;

            switch (a) {
                case 'X':
                    auxr[i][j] = auxj[i][j] = x[i][j] = -1;
                    break;
                case 'R':
                    x[i][j] = auxj[i][j] = 0;
                    auxr[i][j] = 1;
                    k = 1;
                    clin[1] = i;
                    ccol[1] = j;
                    break;
                case 'J':
                    x[i][j] = auxr[i][j]= 0;
                    auxj[i][j] = 1;
                    lj = i;
                    cj = j;
                    break;
                case ' ': // spatiu
                    auxr[i][j] = auxj[i][j] = x[i][j] = 0;
                    break;
                default: // \n
                    for (p = j; p<=m; p++)
                        auxr[i][p] = auxj[i][p] = x[i][p] = 0;
                    j = m+2;
                   break;
            }
        }
        if (j<m+2)
            a = fin.get();
           // fout<<a;
           // a = fin.get();
    }

    for (i = 1; i<= n; i++)
    {
        for (j = 1; j<= m; j++)
            cout << x[i][j] << " ";
        cout << "\n";
    }

    //pt romeo
    while (k > 0)
    {
        val = auxr[clin[1]][ccol[1]];

        for (p = 0; p< 8; p++)
        {
            i2 = clin[1] + l[p];
            j2 = ccol[1] + c[p];
            if(i2<=n and i2>=1 and j2<=m and j2>=1 and 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--;
    }

     for (i = 1; i<= n; i++)
    {
        for (j = 1; j<= m; j++)
            cout << auxr[i][j] << " ";
        cout << "\n";
    }


    //pt julieta
    k = 1;
    clin[1] = lj;
    ccol[1] = cj;

    while (k > 0)
    {
        val = auxj[clin[1]][ccol[1]];

        for (p = 0; p< 8; p++)
        {
            i2 = clin[1] + l[p];
            j2 = ccol[1] + c[p];
            if(i2<=n and i2>=1 and j2<=m and j2>=1 and 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--;
    }

     for (i = 1; i<= n; i++)
    {
        for (j = 1; j<= m; j++)
            cout << auxj[i][j] << " ";
        cout << "\n";
    }


    //gasire punct de intalnire
    minim = 10002;
    val = 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)
            {
                val++;
                minim = auxr[i][j];
                clin[val] = i;
                ccol[val] = j;
            }

    if(val == 1)
        fout << minim << " " << clin[1] << " " << ccol[1];
    else
        if(val > 1)
        {
            k = 102;
            i2 = 0;
            for (i = 1; i<= val; i++)
                if(k > ccol[i])
                {
                    k = ccol[i];
                    i2 = i;
                }

            fout << minim << " " << clin[i2] << " " << ccol[i2];
        }

    return 0;
}