Cod sursa(job #1589609)

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

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()
{
    fin>>n>>m;
    fin.get();
    for(int i=1; i<=n; i++)
    {
        char input[105];
        fin.getline(input,105);
        for(unsigned int j=0; j<strlen(input); j++)
        {
            if(input[j]=='X')
            {
                R[i][j+1]=-1;
                J[i][j+1]=-1;
            }
            if(input[j]=='R')
            {
                xr=i;
                yr=j+1;
            }
            if(input[j]=='J')
            {
                xj=i;
                yj=j+1;
            }
        }
    }
    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;
}

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