Cod sursa(job #2265783)

Utilizator ana.pintiliciucAna Maria Pintiliciuc ana.pintiliciuc Data 21 octombrie 2018 18:00:30
Problema Castel Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.4 kb
#include <cstdio>
#include <queue>
#include <cstring>

using namespace std;

int r[105][105], ju[105][105];
int n, m;
int di[8]= {-1, -1, 0, 1, 1, 1, 0, -1};
int dj[8]= {0, 1, 1, 1, 0, -1, -1, -1};

queue < pair<int,int> >Q;

void lee(int a[105][105], int si, int sj)
{
    a[si][sj]=1;
    Q.push(make_pair(si, sj));
    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+di[v];
            int jv=j+dj[v];
            if(a[iv][jv]==0 && iv>0 && jv>0)
            {
                Q.push(make_pair(iv, jv));
                a[iv][jv]=a[i][j]+1;
            }
        }
    }

}

void bordare()
{
    for(int i=0; i<=n+1; i++)
    {
        r[i][0]=-1;
        r[i][m+1]=-1;
        ju[i][0]=-1;
        ju[i][m+1]=-1;
    }
    for(int j=0; j<=m+1; j++)
    {
        r[0][j]=-1;
        r[n+1][j]=-1;
        ju[0][j]=-1;
        ju[n+1][j]=-1;
    }
}

int main()
{
    freopen("rj.in", "r", stdin);
    freopen("rj.out", "w", stdout);
    scanf("%d %d\n", &n, &m);
    int sri, srj, sji, sjj;
    for(int i=1; i<=n; i++)
    {
        //for(int j=1; j<=m; j++)
        //{
        char x[105];
        fgets(x, 105, stdin);
        int l=strlen(x);
        for(int j=0; j<l-1; j++)
        {
            if(x[j]=='X')
            {
                ju[i][j+1]=-1;
                r[i][j+1]=-1;
            }
            else if(x[j]=='R')
            {
                sri=i;
                srj=j+1;
            }
            else if(x[j]=='J')
            {
                sji=i;
                sjj=j+1;
            }
        }
        //scanf("\n");
    }
    bordare();

    lee(ju, sji, sjj);
    lee(r, sri, srj);
    /**for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            if(r[i][j]==0)
                printf(" ");
            printf("%d ", r[i][j]);
        }
        printf("\n");
    } **/
    int vmin=200, mi, mj;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            if(ju[i][j]==r[i][j] && ju[i][j]!=-1 && ju[i][j]!=0)
            {
                if(vmin>r[i][j])
                {
                    vmin=r[i][j];
                    mi=i;
                    mj=j;
                }
            }
    printf("%d %d %d", vmin, mi, mj);


    return 0;
}