Cod sursa(job #1631043)

Utilizator andrei232000Andrei Maria andrei232000 Data 5 martie 2016 12:50:01
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 6.16 kb
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
short N, M;
char c[101];
short i, j;
short xr, xj, yr, yj;
short tileMapr[102][102], tileMapj[102][102];
short ultim, prim;
short coada[2][10000];
short step;
int minim = 2000000;
short targetX, targetY;
int main()
{
    fin>>N>>M;
    fin.get();
    for(i = 1; i <= N; i++)
    {
        fin.getline(c, 256);
        for(j = 0; j < M; j++)
        {
            tileMapr[i][j + 1] = 1;
            tileMapj[i][j + 1] = 1;
            if(c[j] == 'X')
            {
                tileMapr[i][j + 1] = 0;
                tileMapj[i][j + 1] = 0;
            }
            else if(c[j] == 'R')
            {
                yr = i;
                xr = j + 1;
            }
            else if(c[j] == 'J')
            {
                yj = i;
                xj = j + 1;
            }
        }
    }
    ultim = 0;
    prim = 0;
    coada[0][ultim] = yr;
    coada[1][ultim++] = xr;
    tileMapr[yr][xr] = 2;
    while(ultim != prim)
    {
        step = tileMapr[coada[0][prim]][coada[1][prim]] + 1;
        if(tileMapr[coada[0][prim] - 1][coada[1][prim]] == 1)
        {
            coada[0][ultim] = coada[0][prim] - 1;
            coada[1][ultim] = coada[1][prim];
            tileMapr[coada[0][ultim]][coada[1][ultim]] = step;
            ultim++;
        }
        if(tileMapr[coada[0][prim] + 1][coada[1][prim]] == 1)
        {
            coada[0][ultim] = coada[0][prim] + 1;
            coada[1][ultim] = coada[1][prim];
            tileMapr[coada[0][ultim]][coada[1][ultim]] = step;
            ultim++;
        }
        if(tileMapr[coada[0][prim]][coada[1][prim] - 1] == 1)
        {
            coada[0][ultim] = coada[0][prim];
            coada[1][ultim] = coada[1][prim] - 1;
            tileMapr[coada[0][ultim]][coada[1][ultim]] = step;
            ultim++;
        }
        if(tileMapr[coada[0][prim]][coada[1][prim] + 1] == 1)
        {
            coada[0][ultim] = coada[0][prim];
            coada[1][ultim] = coada[1][prim] + 1;
            tileMapr[coada[0][ultim]][coada[1][ultim]] = step;
            ultim++;
        }
        if(tileMapr[coada[0][prim] - 1][coada[1][prim] - 1] == 1)
        {
            coada[0][ultim] = coada[0][prim] - 1;
            coada[1][ultim] = coada[1][prim] - 1;
            tileMapr[coada[0][ultim]][coada[1][ultim]] = step;
            ultim++;
        }
        if(tileMapr[coada[0][prim] - 1][coada[1][prim] + 1] == 1)
        {
            coada[0][ultim] = coada[0][prim] - 1;
            coada[1][ultim] = coada[1][prim] + 1;
            tileMapr[coada[0][ultim]][coada[1][ultim]] = step;
            ultim++;
        }
        if(tileMapr[coada[0][prim] + 1][coada[1][prim] - 1] == 1)
        {
            coada[0][ultim] = coada[0][prim] + 1;
            coada[1][ultim] = coada[1][prim] - 1;
            tileMapr[coada[0][ultim]][coada[1][ultim]] = step;
            ultim++;
        }
        if(tileMapr[coada[0][prim] + 1][coada[1][prim] + 1] == 1)
        {
            coada[0][ultim] = coada[0][prim] + 1;
            coada[1][ultim] = coada[1][prim] + 1;
            tileMapr[coada[0][ultim]][coada[1][ultim]] = step;
            ultim++;
        }
        prim++;
    }
    ultim = 0;
    prim = 0;
    coada[0][ultim] = yj;
    coada[1][ultim++] = xj;
    tileMapj[yj][xj] = 2;
    while(ultim != prim)
    {
        step = tileMapj[coada[0][prim]][coada[1][prim]] + 1;
        if(tileMapj[coada[0][prim] - 1][coada[1][prim]] == 1)
        {
            coada[0][ultim] = coada[0][prim] - 1;
            coada[1][ultim] = coada[1][prim];
            tileMapj[coada[0][ultim]][coada[1][ultim]] = step;
            ultim++;
        }
        if(tileMapj[coada[0][prim] + 1][coada[1][prim]] == 1)
        {
            coada[0][ultim] = coada[0][prim] + 1;
            coada[1][ultim] = coada[1][prim];
            tileMapj[coada[0][ultim]][coada[1][ultim]] = step;
            ultim++;
        }
        if(tileMapj[coada[0][prim]][coada[1][prim] - 1] == 1)
        {
            coada[0][ultim] = coada[0][prim];
            coada[1][ultim] = coada[1][prim] - 1;
            tileMapj[coada[0][ultim]][coada[1][ultim]] = step;
            ultim++;
        }
        if(tileMapj[coada[0][prim]][coada[1][prim] + 1] == 1)
        {
            coada[0][ultim] = coada[0][prim];
            coada[1][ultim] = coada[1][prim] + 1;
            tileMapj[coada[0][ultim]][coada[1][ultim]] = step;
            ultim++;
        }
        if(tileMapj[coada[0][prim] - 1][coada[1][prim] - 1] == 1)
        {
            coada[0][ultim] = coada[0][prim] - 1;
            coada[1][ultim] = coada[1][prim] - 1;
            tileMapj[coada[0][ultim]][coada[1][ultim]] = step;
            ultim++;
        }
        if(tileMapj[coada[0][prim] - 1][coada[1][prim] + 1] == 1)
        {
            coada[0][ultim] = coada[0][prim] - 1;
            coada[1][ultim] = coada[1][prim] + 1;
            tileMapj[coada[0][ultim]][coada[1][ultim]] = step;
            ultim++;
        }
        if(tileMapj[coada[0][prim] + 1][coada[1][prim] - 1] == 1)
        {
            coada[0][ultim] = coada[0][prim] + 1;
            coada[1][ultim] = coada[1][prim] - 1;
            tileMapj[coada[0][ultim]][coada[1][ultim]] = step;
            ultim++;
        }
        if(tileMapj[coada[0][prim] + 1][coada[1][prim] + 1] == 1)
        {
            coada[0][ultim] = coada[0][prim] + 1;
            coada[1][ultim] = coada[1][prim] + 1;
            tileMapj[coada[0][ultim]][coada[1][ultim]] = step;
            ultim++;
        }
        prim++;
    }
    for(i = 1; i <= N; i++)
    {
        for(j = 1; j <= M; j++)
        {
            if(tileMapr[i][j] > 1)
            {
                if(tileMapr[i][j] == tileMapj[i][j])
                {
                    if(tileMapr[i][j] < minim)
                    {
                        minim = tileMapr[i][j] - 1;
                        targetY = i;
                        targetX = j;
                    }
                }
            }
        }
    }
    fout<<minim<<" "<<targetY<<" "<<targetX;
    return 0;
}