Cod sursa(job #1860217)

Utilizator KemyKoTeo Virghi KemyKo Data 27 ianuarie 2017 22:19:44
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.63 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;

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

queue < pair < int, int > > R,J;

pair < int, int >r,julieta,rez;

int a[101][101],b[101][101],n,m,mn=999;
int dx[8]={1,1,1,-1,-1,-1,0,0};
int dy[8]={0,-1,1,0,-1,1,-1,1};

void citire()
{
    int i,j;
    char c;

    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        if(c!='\n') f.get(c);
        for(j=1;j<=m;j++)
        {
            f.get(c);
            if(c=='X') b[i][j]=a[i][j]=-1;
            if(c=='R') r=make_pair(i,j);
            if(c=='J') julieta=make_pair(i,j);
        }
    }
}

int ok(int i,int j,int a[101][101])
{
    if (i>=1 && i<=n && j>=1 && j<=m && a[i][j]==0)
        return 1;
    return 0;
}

void Lee()
{
    int i,j,i_urm,j_urm,ok1=1;

    R.push(make_pair(r.first,r.second));        //ROMEO
    a[r.first][r.second]=1;

    while (!R.empty() && ok1==1){
        i=R.front().first;
        j=R.front().second;
        R.pop();

        for (int directii=0;directii<8;directii++){
            i_urm=i+dx[directii];
            j_urm=j+dy[directii];

            if (ok(i_urm,j_urm,a)){
                a[i_urm][j_urm]=a[i][j]+1;
                R.push(make_pair(i_urm,j_urm));
            }
            if (i_urm == julieta.first && j_urm==julieta.second)
                ok1=0;
        }
    }
    ok1=1;
    J.push(make_pair(julieta.first,julieta.second));        //JULIETA
    b[julieta.first][julieta.second]=1;

    while (!J.empty()){
        i=J.front().first;
        j=J.front().second;
        J.pop();

        for (int directii=0;directii<8;directii++){
            i_urm=i+dx[directii];
            j_urm=j+dy[directii];

            if (ok(i_urm,j_urm,b)){
                b[i_urm][j_urm]=b[i][j]+1;
                J.push(make_pair(i_urm,j_urm));
            }
            if (i_urm == r.first && j_urm==r.second)
                ok1=0;
        }
    }
}

void parcurgere()
{
    int i,j;
    for (i=1;i<=n;i++){
        for (j=1;j<=m;j++){
            if (a[i][j]==b[i][j] && a[i][j]>0 && mn>a[i][j]){
                mn=a[i][j];
                rez=make_pair(i,j);
            }

        }
    }
}

void afis()
{
    g<<mn<<" "<<rez.first<<" "<<rez.second;
}

int main()
{
    int i,j;
    citire();
    Lee();
    parcurgere();
    afis();
    for (i=1;i<=n;i++){
        for (j=1;j<=m;j++){
            cout<<a[i][j]<<" ";
        }
        cout<<'\n';
    }
    cout<<endl;
    for (i=1;i<=n;i++){
        for (j=1;j<=m;j++){
            cout<<b[i][j]<<" ";
        }
        cout<<'\n';
    }
}