Cod sursa(job #2195769)

Utilizator AndreiGSGhiurtu Andrei AndreiGS Data 17 aprilie 2018 12:51:30
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.02 kb
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
queue<pair<int, int>>q;
int vi[8]= {-1, -1, -1, 0, 0, 1, 1, 1};
int vj[8]= {-1, 0, 1, -1, 1, -1, 0, 1};
int Rsi, Rsj;
int Jsi, Jsj;
int a[180][180];
int x,y, n, m, v, R[105][105], J[105][105];
void Lee(int a[105][105], int pi, int pj)
{
    a[pi][pj]=1;
    q.push({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(a[iv][jv]==0)
            {
                q.push({iv,jv});
                a[iv][jv]=a[i][j]+1;
            }
        }

    }
}

int rez()
{

    for(int i=0; i<=n+1; i++)
    {
        R[i][0]=-1;
        J[i][0]=-1;
        R[i][m+1]=-1;
        J[i][m+1]=-1;
    }
    for(int i=0; i<=m+1; i++)
    {
        R[0][i]=-1;
        J[0][i]=-1;
        R[n+1][i]=-1;
        J[n+1][i]=-1;
    }

    char s[105], c;
    for(int i=1; i<=n; i++)
    {
        gets(s+1);
        for(int j=1; j<=m; j++)
        {
            c=s[j];
            if(c=='X')
            {
                R[i][j]=-1;
                J[i][j]=-1;
            }
            else if(c=='R')
            {
                Rsi=i;
                Rsj=j;
            }
            else if(c=='J')
            {
                Jsi=i;
                Jsj=j;
            }
            scanf("\n");
        }
    }
    Lee(R, Rsi, Rsj);
    Lee(J, Jsi, Jsj);
    int minim=n*m;
    int pozi, pozj;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            if(R[i][j]==J[i][j] && R[i][j]<minim && R[i][j]>0)
            {
                minim=R[i][j];
                pozi=i;
                pozj=j;
            }
    printf("%d %d %d", minim, pozi, pozj);
}

int main()
{
    int x;
    freopen("rj.in", "r", stdin);
    freopen("rj.out", "w", stdout);
    scanf("%d %d\n", &n, &m);
    rez();
    return 0;
}