Cod sursa(job #1925476)

Utilizator djmafy2000Andrei djmafy2000 Data 13 martie 2017 11:33:22
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.02 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream f("rj.in");
ofstream g("rj.out");

struct pereche{
int x, y;
};

void initDir(pereche d[8])
{
    d[0].y = 0;  d[0].x = -1;
    d[1].y = +1; d[1].x = -1;
    d[2].y = +1; d[2].x = 0;
    d[3].y = +1; d[3].x = +1;
    d[4].y = 0;  d[4].x = +1;
    d[5].y = -1; d[5].x = +1;
    d[6].y = -1; d[6].x = 0;
    d[7].y = -1; d[7].x = -1;
}

void showMatrix(int a[100][100], int n, int m)
{
    int i, j;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
            cout<<a[i][j]<<' ';
        cout<<endl;
    }
    cout<<endl;
}

void bordare(int a[100][100], int n, int m)
{
    int i;
    for(i=0; i<=n+1; i++)
        a[i][0] = a[i][m+1] = -1;
    for(i=0; i<=m+1; i++)
        a[0][i] = a[n+1][i] = -1;
}

int main()
{
    pereche R[100], J[100], dir[8];
    initDir(dir);
    int stR = 1, drR = 0, xR, yR, Rmat[100][100];
    int stJ = 1, drJ = 0, xJ, yJ, Jmat[100][100];

    int n, m, i, j;
    char c;
    f>>n>>m;
    int enter = 0;
    for(i=1; i<=n; i++)
    {
        if(!enter)
            f.get();
        enter = 0;
        for(j=1; j<=n; j++)
        {
            f.get(c);
            if(c == 'R')
            {
                drR++;
                R[drR].x = i;
                R[drR].y = j;
                Rmat[i][j] = 1;
            }
            if(c == 'J')
            {
                drJ++;
                J[drJ].x = i;
                J[drJ].y = j;
                Jmat[i][j] = 1;
            }
            if(c == 'X')
                Rmat[i][j] = Jmat[i][j] = -1;
            if(c == '\n')
                enter = 1;
        }
    }
    bordare(Rmat, n, m);
    bordare(Jmat, n, m);
    //showMatrix(Rmat, n, m);
    //showMatrix(Jmat, n, m);

    while(stR<=drR)
    {
        for(i=0; i<8; i++)
        {
            xR = R[stR].x + dir[i].x;
            yR = R[stR].y + dir[i].y;
            if(Rmat[xR][yR] == 0)
            {
                drR++;
                R[drR].x = xR;
                R[drR].y = yR;
                Rmat[xR][yR] = Rmat[ R[stR].x ][ R[stR].y ] + 1;
            }
        }
        stR++;
    }
    //showMatrix(Rmat, n, m);

    while(stJ <= drJ)
    {
        for(i=0; i<8; i++)
        {
            xJ = J[stJ].x + dir[i].x;
            yJ = J[stJ].y + dir[i].y;
            if(Jmat[xJ][yJ] == 0)
            {
                drJ++;
                J[drJ].x = xJ;
                J[drJ].y = yJ;
                Jmat[xJ][yJ] = Jmat[ J[stJ].x ][ J[stJ].y ] + 1;
            }
        }
        stJ++;
    }
    //showMatrix(Jmat, n, m);

    int a, b, mindrum = n*m+1;
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            if(Rmat[i][j] != -1 && Rmat[i][j] && Rmat[i][j] == Jmat[i][j] && Rmat[i][j] < mindrum)
            {
                mindrum = Rmat[i][j];
                a = i;
                b = j;
            }
    g<<mindrum<<' '<<a<<' '<<b;
    f.close();
    g.close();
    return 0;
}