Cod sursa(job #1590847)

Utilizator valentinoMoldovan Rares valentino Data 5 februarie 2016 16:36:29
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.19 kb
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;

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

struct punct
{
    int l, c, d;
};
int dx[8] = {-1,-1,0,1,1,1,0,-1}, dy[8] = {0,1,1,1,0,-1,-1,-1};
punct coada[32000], x, y;
char s[105];
int  n, m,bin[105][105],xr,yr,xj,yj,jul[105][105], rom[105][105];

void reset()
{
    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= m; ++j)
        bin[i][j] = 0;
}
bool OK(int i, int j, int a[105][105])
{
    if(i < 1 || j <1 || i > n || j > m)
        return false;
    else if(a[i][j] == -1)
        return false;
    return true;
}


void Lee(int X, int Y, int a[105][105])
{
     a[X][Y] = 1;
     bin[X][Y] = 1;
     int inceput = 1, sfarsit = 1;
     coada[inceput].l = X;
     coada[inceput].c = Y;
     coada[inceput].d = 1;
     while(inceput<=sfarsit)
     {
         x  = coada[inceput];
         inceput++;
         for(int i = 0; i < 8; ++i)
         {
             if(bin[x.l+dx[i]][x.c+dy[i]] == 0 && OK(x.l+dx[i],x.c+dy[i],a))
             {
                 a[x.l+dx[i]][x.c+dy[i]] = a[x.l][x.c] + 1;
                 y.d = x.d + 1;
                 y.l = x.l + dx[i];
                 y.c = x.c + dy[i];
                 bin[y.l][y.c] = 1;
                 sfarsit++;
                 coada[sfarsit] = y;
             }
         }
     }
}

void Read()
{
    f >> n >> m;
    f.getline(s,22);
    for(int i = 1; i <= n; ++i)
    {
        f.getline(s,200);
        for(int j = 0; j < strlen(s); ++j)
        {
            if(s[j] == 'X') jul[i][j+1] = -1, rom[i][j+1] = -1;
            else if(s[j] == 'J') xj = i, yj = j+1;
            else if(s[j] == 'R') xr = i, yr = j+1;
        }
    }
    Lee(xr,yr,rom);
    reset();
    Lee(xj,yj,jul);


}

int main()
{
    Read();
    long long minn = 10000000000, xmin, ymin;
    for(int i = 1; i <= n; ++i)
    {
        for(int j = 1; j<=m; ++j)
        {
            if(rom[i][j] == jul[i][j] && rom[i][j]<minn && rom[i][j] > 0)
            {
                minn = rom[i][j];
                xmin = i;
                ymin = j;
            }
        }

    }
    g<<minn<<' '<<xmin<<' '<<ymin;



}