Cod sursa(job #679809)

Utilizator AllenSmailovic Alen Allen Data 13 februarie 2012 19:20:15
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.08 kb
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string.h>

using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");

int a[105][105];
int n,m,xi,yi,xf,yf;
char s[200];
int u=1, p=0;

int di[8]={0,1,1,1,0,-1,-1,-1};
int dj[8]={1,1,0,-1,-1,-1,0,1};

struct coada{
    int i;
    int j;
}c[105*105];

/*void citire()
{
    fin>>n>>m;
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
        {
            fin>>s;
            //if (s=='X')
               // a[i][j]=-1;
            if (s=='R')
            {
                xi=i;
                yi=j;
            }
            if (s=='J')
            {
                xf=i;
                yf=j;
            }
        }
}*/

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

int lee()
{
    c[p].i=xi;
    c[p].j=yi;
    a[xi][yi]=1;
    while (p<u)
    {
        int il=c[p].i;
        int jl=c[p].j;
        for (int k=0;k<4;k++)
        {
            int i2=il+di[k];
            int j2=jl+dj[k];
            if (a[i2][j2]==0)
            {
                c[u].i=i2;
                c[u].j=j2;
                a[i2][j2]=a[il][jl]+1;
                if ((i2==xf) && (j2==yf))
                    return a[il][jl]+1;
                u++;
            }
        }
        p++;
    }
    return -1;
}

int main()
{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    scanf("%d%d\n",&n,&m);
    for (int i=0;i<n;i++)
    {
        gets(s);
        for (int j=0;j<m;j++)
        {
            if (s[j]=='X')
                a[i][j]=-1;
            else
                a[i][j]=0;
            if (s[j]=='R'){
                xi=i;
                yi=j;}
            if (s[j]=='J'){
                xf=i;
                yf=j;}

        }
    }


    //citire();
    bordare();
    int pas=lee();
    pas=(pas+1)/2;
    fout<<pas;
    fout<<" "<<c[pas*2].i<<" "<<c[pas].j+1;
    return 0;
}