Cod sursa(job #1725299)

Utilizator marius25cCretu Marius marius25c Data 5 iulie 2016 13:21:26
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.14 kb
#include <fstream>
#include <queue>
#include <string>

using namespace std;

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

int di[8] = {1,0,-1,0,-1,1,1,-1};
int dj[8] = {1,1,1,-1,-1,0,-1,0};

int N,M;
char c;
int start1,start2,start3,start4;
queue < pair <int, int> > coada;

void Read(int R[105][105], int J[105][105]){
    g>> N >> M;
    g.get(c);
    for(int i = 1; i <= N ; i++)
    {
        int j=0;
        while(g.get(c) && c != '\n')
        {
            j++;
            if(c == ' ')
                R[i][j] = J[i][j] = 0;
            if(c == 'X')
                R[i][j] = J[i][j] = -1;
            if(c == 'R')
            {
                start1=i; start2=j;
                R[i][j] = 1;
            }
            if(c == 'J')
            {
                start3=i; start4=j;
                J[i][j] = 1;
            }
        }
    }
}
void bording(int R[105][105], int J[105][105]){
    for(int i=0; i<=N+1; i++){
        R[i][0]=J[i][0]=R[i][M+1]=J[i][M+1]=-1;
    }
    for(int i=0; i<=M+1; i++){
        R[0][i]=J[0][i]=R[N+1][i]=J[N+1][i]=-1;
    }
}

void Lee(int startx, int starty, int Map[105][105]){
    int i,j,i_urmator,j_urmator;
    coada.push({startx,starty});
    while( !coada.empty() ){
        i = coada.front().first;
        j = coada.front().second;
        coada.pop();
        for(int directie=0; directie < 8; directie ++){
            i_urmator = i + di[directie];
            j_urmator = j + dj[directie];

        if(Map[i_urmator][j_urmator] == 0){
            Map[i_urmator][j_urmator] = Map[i][j] + 1;
            coada.push({i_urmator,j_urmator});
            }
        }
    }
}
void Write(int R[105][105], int J[105][105] ){
    int minn=1000,x,y;
    for(int i = 1; i <= N; i++)
    {
        for(int j = 1; j <= M; j++){
            if(R[i][j] == J[i][j] && R[i][j] < minn && R[i][j]!= -1 && R[i][j] != 0)
            minn=R[i][j],y=j,x=i;
        }
    }
    gg<<minn<<" "<<x<<" "<<y;
}
int main()
{
    int R[105][105],J[105][105];
    Read(R,J);
    bording(R,J);
    Lee(start1,start2,R);
    Lee(start3,start4,J);
    Write(R,J);
    return 0;
}