Cod sursa(job #880963)

Utilizator mads2194FMI - Andrei Stroe mads2194 Data 17 februarie 2013 15:59:54
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.17 kb
#include <cstdio>
#include <queue>

#define N 252

using namespace std;

char map[N][N];
int d[N][N];
int n,m;

const int dlin[] = {1,-1,0,0,1,-1,1,-1};
const int dcol[] = {0,0,1,-1,1,1,-1,-1};

struct elem
{
    int lin,col;
} res;

queue <elem> q;

bool accesibil(elem p)
{
    if(p.lin>=n) return 0;
    if(p.lin<0) return 0;
    if(p.col>=m) return 0;
    if(p.col<0) return 0;
    return 1;
}

void read()
{
    char c[102];
    elem p;
    scanf("%d %d\n",&n,&m);
    for(int i=0;i<n;++i)
    {
        gets(c);
        for(int j=0;j<m;++j)
        {
        if(c[j] == 'X') d[i][j]=-1;
        //else if(c[j] == ' ') ;
        else if(c[j]== 'R')
            {
                p.col=j, p.lin=i;
                q.push(p);
                d[i][j]=1;
                map[i][j]=1;
            }
        else if(c[j]== 'J')
            {
                p.col=j, p.lin=i;
                q.push(p);
                d[i][j]=1;
                map[i][j]=2;
            }
        }
    }
}

elem run()
{
    elem a,b;

    while(! q.empty())
    {
        a=q.front();
        q.pop();

        for(int i=0;i<8;++i)
        {
            b.col = a.col+dcol[i];
            b.lin = a.lin+dlin[i];
            if(accesibil(b) && d[b.lin][b.col]>-1)
            {
                if(d[b.lin][b.col]==0)
                {
                    q.push(b);
                    d[b.lin][b.col] = d[a.lin][a.col]+1;
                    map[b.lin][b.col] = map[a.lin][a.col];
                }
                else if(map[b.lin][b.col]!=map[a.lin][a.col])
                //if(d[b.lin][b.col]>0)
                {
                    //if(d[b.lin][b.col] == d[a.lin][a.col])
                    //    ++d[b.lin][b.col];
                    return b;
                }
            }
        }
    }
}

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

    read();

    res = run();

    /*for(int i=0;i<n;++i)
    {
        for(int j=0;j<m;++j)
            printf("%d ",d[i][j]);
        printf("\n");
    }*/
    printf("%d %d %d",d[res.lin][res.col],1+res.lin,1+res.col);
    return 0;
}