Cod sursa(job #2268426)

Utilizator PandaChanTrusca Daria PandaChan Data 24 octombrie 2018 19:58:47
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2 kb
#include <fstream>
#include <queue>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n, m, pir, pjr, pij, pjj, a[105][105], b[105][105], vmin=999, mi, mj;
queue<pair<int, int> >Q;
int vi[8]={-1, -1, 0, 1, 1, 1, 0, -1};
int vj[8]={0, 1, 1, 1, 0, -1, -1, -1};
void lee(int x[105][105], int pi, int pj)
{
    x[pi][pj]=1;
    Q.push(make_pair(pi, pj));
    while(!Q.empty())
    {
        int i=Q.front().first;
        int j=Q.front().second;
        Q.pop();
        for(int v=0;v<8;v++)
        {
            int iv=i+vi[v];
            int jv=j+vj[v];
            if(x[iv][jv]==0 && iv>0 && jv>0)
            {
                Q.push(make_pair(iv, jv));
                x[iv][jv]=x[i][j]+1;
            }
        }
    }
}
void bordare(int x[105][105], int n, int m)
{
    for(int i=0; i<=n+1; i++)
    {
        x[i][0]=-1;
        x[i][m+1]=-1;
    }
    for(int j=0; j<=m+1; j++)
    {
        x[0][j]=-1;
        x[n+1][j]=-1;
    }
}
int main()
{
    f>>n>>m;
    f.get();
    for(int i=1; i<=n; i++)
    {
        char c[105];
        f.getline(c, 105);
        int l=strlen(c);
        for(int j=0; j<l; j++)
        {
            if(c[j]=='X')
            {
                a[i][j+1]=-1;
                b[i][j+1]=-1;
            }
            else if(c[j]=='R')
            {
                pir=i;
                pjr=j+1;
            }
            else if(c[j]=='J')
            {
                pij=i;
                pjj=j+1;
            }
        }
    }
    bordare(a, n, m);
    bordare(b, n, m);
    lee(a, pir, pjr);
    lee(b, pij, pjj);
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
        {
            if(a[i][j]==b[i][j] && a[i][j]!=-1)
            {
                if(vmin>=a[i][j])
                {
                    vmin=a[i][j];
                    mi=i;
                    mj=j;
                }
            }
        }
    g<<vmin<<' '<<mi<<' '<<mj;
    return 0;
}