Cod sursa(job #1919717)

Utilizator andreistanStan Andrei andreistan Data 9 martie 2017 20:45:01
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.96 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

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

const int DMAX=101;

struct pozitie
{
    int x,y;
};
pozitie C[DMAX*DMAX+1];

int N,M;
int ro[DMAX][DMAX],ju[DMAX][DMAX];
int tmin=DMAX*DMAX+1,minx,miny;
pozitie pro,pju;
int d[8][2] = {{0, -1},{-1,-1}, { -1, 0},{-1,1}, {0, 1}, {1, 1}, {1, 0}, {1,-1}};

void bordare()
{
    int M1=M+1,N1=N+1;
    for(int j=0; j<=M1; j++)
        ro[0][j]=ro[N1][j]=ju[0][j]=ju[N1][j]=-1;
    for(int i=0; i<=N1; i++)
        ro[i][0]=ro[i][M1]=ju[i][0]=ju[i][M1]=-1;
}

void citire()
{
    char c;
    f.get();
    for(int i=1; i<=N; i++)
    {
        char c[101];
        f.getline(c+1,101);
        for(int j=1; j<=M; j++)
        {
            switch(c[j])
            {
            case 'R':
                pro.x=i;
                pro.y=j;
                ro[i][j]=1;
                break;
            case 'J':
                pju.x=i;
                pju.y=j;
                ju[i][j]=1;
                break;
            case 'X':
                ro[i][j]=-1,ju[i][j]=-1;
            }
        }
    }
}

void Lee(pozitie pstart, int L[DMAX][DMAX])
{
    pozitie crt,vec;
    int p=1,u=1;
    C[1]=pstart;
    while(p<=u)
    {
        crt=C[p++];
        for(int k=0; k<8; k++)
        {
            vec.x=crt.x+d[k][0];
            vec.y=crt.y+d[k][1];
            if(L[vec.x][vec.y]==0)
            {
                L[vec.x][vec.y]=L[crt.x][crt.y]+1;
                C[++u]=vec;
            }
        }
    }
}

int main()
{
    f>>N>>M;
    citire();
    bordare();
    Lee(pro,ro);
    Lee(pju,ju);
    for(int i=1;i<=N;i++)
        for(int j=1;j<=M;j++)
            if(ro[i][j]==ju[i][j] && ro[i][j]<tmin && ro[i][j]>0)
            {
                tmin=ro[i][j];
                minx=i;
                miny=j;
            }
    g<<tmin<<' '<<minx<<' '<<miny;

    return 0;
}