Cod sursa(job #1579667)

Utilizator andreiskiorAndrei Cristian Nastase andreiskior Data 24 ianuarie 2016 22:36:40
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.35 kb
#include <stdio.h>
#include <ctype.h>

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

struct element
{
    int l,c;
};

element coada[100000];
int b = 0, e = 0;

void push(int val1, int val2)
{
    coada[e].l = val1;
    coada[e++].c = val2;
}

void pop()
{
    b++;
}

int n,m;
int hartar[100][100];
int hartaj[100][100];

int main()
{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    char s[100];
    int i,j,ic,jc,ji,jj,dir;
    scanf("%d %d\n",&n,&m);
    for(i = 0; i < n ; ++i)
    {
        gets(s);
        for(j = 0; j < m; ++j)
        {
            if(isspace(s[j]))
                hartar[i][j] = hartaj[i][j] = 0;
            else
                if(s[j] == 'X')
                    hartar[i][j] = hartaj[i][j] = -1;
                 else
                    if(s[j] == 'R'){
                        push(i,j);
                        hartar[i][j] = 1;
                    }
                    else
                    {
                        hartaj[i][j] = 1;
                        ji = i;
                        jj = j;
                    }

        }
    }
    while(e - b > 0)
    {
        i = coada[b].l;
        j = coada[b].c;
        pop();
        for(dir = 0; dir < 4; ++dir)
        {
            ic = i + dx[dir];
            jc = j + dy[dir];
            if(i >= 0 && j >= 0 && i < n && j < m && hartar[ic][jc] == 0)
            {
                hartar[ic][jc] = hartar[i][j] + 1;
                push(ic,jc);
            }
        }
    }
    push(ji,jj);
    while(e - b > 0)
    {
        i = coada[b].l;
        j = coada[b].c;
        pop();
        for(dir = 0; dir < 4; ++dir)
        {
            ic = i + dx[dir];
            jc = j + dy[dir];
            if(i >= 0 && j >= 0 && i < n && j < m && hartaj[ic][jc] == 0)
            {
                hartaj[ic][jc] = hartaj[i][j] + 1;
                push(ic,jc);
            }
        }
    }
    int mini,minj,minim = 101 * 101;
    for(i = 0; i < n; ++i){
        for(j = 0; j < m ; ++j)
            if(hartar[i][j] == hartaj[i][j] && hartar[i][j] < minim && hartar[i][j] > 0)
                {
                    mini = i;
                    minj = j;
                    minim = hartar[i][j];
                }
    }
    printf("%d %d %d",minim-1,mini+1,minj+1);
    return 0;
}