Cod sursa(job #2092384)

Utilizator iDanyelArvat Ovidiu Daniel iDanyel Data 21 decembrie 2017 16:41:30
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <queue>
#define INF 99999
using namespace std;

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

queue < pair < int, int > > Q;

int dx[8]= {-1,-1,-1,0,1,1,1,0};
int dy[8]= {-1,0,1,1,1,0,-1,-1};

int n, m, a[101][101], b[101][101];
int x1, y1, x2, y2;
char c[101];

bool inauntru(int x, int y)
{
    if(x<1||y<1||x>n||y>m)
        return false;

    return true;
}

void Lee(int x, int y, int v[101][101])
{
    v[x][y]=1;
    Q.push(make_pair(x,y));

    while(!Q.empty())
    {
        int ii=Q.front().first, jj=Q.front().second;
        Q.pop();

        for(int dir=0; dir<8; dir++)
            if(inauntru(ii+dx[dir],jj+dy[dir])&&v[ii+dx[dir]][jj+dy[dir]]==0)
            {
                v[ii+dx[dir]][jj+dy[dir]]=v[ii][jj]+1;
                Q.push(make_pair(ii+dx[dir],jj+dy[dir]));
            }
    }
}

int main()
{
    fin >> n >> m;

    for(int i=1; i<=n; i++)
    {
        fin.get();
        fin.get(c,101);

        for(int j=0; j<m; j++)
        {
            if(c[j]=='X')
                a[i][j+1]=b[i][j+1]=-1;

            else if(c[j]=='R')
                x1=i, y1=j+1, b[i][j+1]=-1;

            else if(c[j]=='J')
                x2=i, y2=j+1, a[i][j+1]=-1;
        }
    }

    Lee(x1,y1,a);
    Lee(x2,y2,b);

    int MIN=INF, poz1=0, poz2=0;

    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            if(a[i][j]==b[i][j]&&a[i][j]>0&&a[i][j]<MIN)
                MIN=a[i][j], poz1=i, poz2=j;

    fout << MIN << " " << poz1 << " " << poz2;
    return 0;
}