Cod sursa(job #1589627)

Utilizator m0mentRaducanu Andrei m0ment Data 4 februarie 2016 11:20:56
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.94 kb
#include <fstream>

using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");


int dx[]= {1,0,-1,0};
int dy[]= {0,1,0,-1};
int R[110][110],J[110][110];
int n,m;
int xr,yr,xj,yj;

struct coada
{
    int x,y;
};


void bordare(int X[110][110],int x,int y)
{
    for(int i=0; i<=x+1; i++)
        X[i][0]=X[i][y+1]=-1;
    for(int i=0; i<=y+1; i++)
        X[0][i]=X[x+1][i]=-1;
}

void citire()
{
    char input;
    fin>>n>>m;
    fin.get();
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            fin.get(input);
            if(input=='\n')
                break;
            if(input=='X')
            {
                R[i][j]=-1;
                J[i][j]=-1;
            }
            if(input=='R')
            {
                xr=i;
                yr=j;
            }
            if(input=='J')
            {
                xj=i;
                yj=j;
            }
        }
        if(input!='\n')
            fin.get();
    }
    bordare(R,n,m);
    bordare(J,n,m);
}

void lee(int X[110][110],int x0,int y0)
{
    coada C[110*110],E;
    int ic=1,sc=1;
    X[x0][y0]=1;
    C[ic].x=x0;
    C[ic].y=y0;
    while(ic<=sc)
    {
        E=C[ic++];
        for(int k=0; k<4; k++)
        {
            int x9=E.x+dx[k];
            int y9=E.y+dy[k];
            if(!X[x9][y9])
            {
                X[x9][y9]=X[E.x][E.y]+1;
                C[++sc].x=x9;
                C[sc].y=y9;
            }
        }
    }
}

void afisare()
{
    int mv=1000000,mx=0,my=0;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            if(R[i][j]==J[i][j] && R[i][j]>0 && R[i][j]<mv)
            {
                mv=R[i][j];
                mx=i;
                my=j;
            }
    fout<<mv-1<<' '<<mx<<' '<<my<<'\n';
}

int main()
{
    citire();
    lee(R,xr,yr);
    lee(J,xj,yj);
    afisare();
    return 0;
}