Cod sursa(job #2185048)

Utilizator andreisavulescuSavulescu Andrei andreisavulescu Data 24 martie 2018 12:48:26
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.99 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
const int DMAX=100;
struct pozitie
{
    unsigned char x,y;
};
pozitie C[DMAX*DMAX+1];
int N,M,p=0,u=0;
short int ro[DMAX+2][DMAX+2];
short int jo[DMAX+2][DMAX+2];
pozitie pjo,pro;
int tmin=DMAX*DMAX+1,xmin,ymin;
int d[8][2]= {{0,-1},{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1}};
void citire()
{
    f>>N>>M;
    f.get();
    for(int i=1; i<=N; i++)
    {
        char c[DMAX+2];
        f.getline(c+1,DMAX+1);
        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':
                pjo.x=i;
                pjo.y=j;
                jo[i][j]=1;
                break;
            case 'X':
                jo[i][j]=-1;
                ro[i][j]=-1;
            }
        }
    }
}
void bordare()
{
    int M1=M+1,N1=N+1;
    for(int j=0; j<=M1; j++)
        ro[0][j]=ro[N1][j]=jo[0][j]=jo[N1][j]=-1;
    for(int i=0; i<=N1; i++)
        ro[i][0]=ro[i][M1]=jo[i][0]=jo[i][M1]=-1;
}
void Lee(pozitie ps,short int L[][DMAX+2])
{
   pozitie vec, crt;
    p = 1,u=1;
    C[1]=ps;
    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()
{
    citire();
    bordare();
    Lee(pro,ro);
    Lee(pjo,jo);
    for(int i=1; i<=N; i++)
        for(int j=1; j<=M; j++)
            if(ro[i][j]>0 && ro[i][j]==jo[i][j] && ro[i][j]<tmin)
            {
                tmin=ro[i][j];
                xmin=i;
                ymin=j;
            }
    g<<tmin<< ' '<<xmin<<' '<<ymin;
    return 0;
}