Cod sursa(job #2667636)

Utilizator andreea.vasilescuAndreea Vasilescu andreea.vasilescu Data 3 noiembrie 2020 18:22:33
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.13 kb
#include <stdio.h>
#include <string.h>

#define NMAX 105


typedef struct coada
{
    int x, y;
};


char a[NMAX][NMAX];
int n, m;
int ri, rj, ji, jj;

int r[NMAX][NMAX];
int j[NMAX][NMAX];


void read()
{
    int i, j;

    scanf("%d %d\n", &n, &m);

    for(i = 1; i <= n; ++i)
    {
        fgets(a[i]+1, NMAX, stdin);


        for(j = 1; j <= m; ++j)
        {
            if(a[i][j] == 'R')
                ri = i, rj = j;
            else if(a[i][j] == 'J')
                ji = i, jj = j;
        }
    }
}


void parcurgere(int bi, int bj, int m[NMAX][NMAX])
{
    coada c[10000];

    int inc, sf;
    int x, y, j;
    int dx[] = {-1, -1, 0, 1, 1, 1, 0, -1}, dy[] = {0, 1, 1, 1, 0, -1, -1, -1};


    memset(m, 0, sizeof(m));


    inc = sf = 0;


    c[0].x = bi;
    c[0].y = bj;


    m[bi][bj] = 1;


    while(inc <= sf)
    {
        x = c[inc].x;
        y = c[inc++].y;


        for(j = 0; j < 8; ++j)
        {
            if((a[ x+dx[j] ][ y+dy[j] ] == ' ')  &&  (m[ x+dx[j] ][ y+dy[j] ] == 0)  )
            {
                c[++sf].x = x+dx[j];
                c[sf].y = y+dy[j];

                m[ x+dx[j] ][ y+dy[j] ] = m[x][y] + 1;
            }
        }
    }
}


void bordare()
{
    int i;

    for(i = 0; i <= n+1; ++i)
        a[i][0] = a[i][m+1] = 'X';

    for(i = 0; i <= m+1; ++i)
        a[0][i] = a[n+1][i] = 'X';
}


void write()
{
    int i, k;
    int tmin = 32000, x, y;


    for(i = 1; i <= n; ++i)
    {
        for(k = 1; k <= m; ++k)
            if((r[i][k] != 0)  &&  (r[i][k] == j[i][k]))
                if(tmin > r[i][k])
                {
                    tmin = r[i][k];

                    x = i;
                    y = k;
                }
    }
    printf("%d %d %d\n", tmin, x, y);
}


void print_m(int p[NMAX][NMAX])
{
    int i, j;


    for(i = 1; i <= n; ++i)
    {
        for(j = 1; j <= m; ++j)
            printf("%d ", p[i][j]);
        printf("\n");
    }
}



int main()
{
    freopen("rj.in", "r", stdin);
    freopen("rj.out", "w", stdout);


    read();


    bordare();


    parcurgere(ri, rj, r);




    parcurgere(ji, jj, j);


    write();


    fclose(stdin);
    fclose(stdout);

    return 0;
}