Cod sursa(job #2125122)

Utilizator ApolodorTudor Fernea Apolodor Data 7 februarie 2018 23:36:22
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.06 kb
#include <fstream>
#include <queue>

using namespace std;

char c[101];
int n,k,m,dist,l,i,j,ir,jr,ij,jj,x,y;
int a[101][101];

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

queue <pair<int, int> > coada;

ifstream fi("rj.in");
ofstream fo("rj.out");

bool verif(int i, int j)
{
    if(i>n or j>m or i<1 or j<1)
        return false;
    if(a[i][j]==1)
        return false;
    return true;
}

int lee(int xr,int yr,int xj,int yj)
{
    int i,j,i_urm,j_urm;
    a[xr][yr]=100000;
    a[xj][yj]=-100000;
    coada.push(make_pair(xr,yr));
    coada.push(make_pair(xj,yj));
    while(!coada.empty())
    {
        i=coada.front().first;
        j=coada.front().second;
        coada.pop();
        for(int dir=0;dir<7;dir++)
        {
            i_urm=i+di[dir];
            j_urm=j+dj[dir];
            if(verif(i_urm,j_urm))
                if(a[i_urm][j_urm]==0)
            {
                a[i_urm][j_urm]=a[i][j]+1;
                coada.push(make_pair(i_urm,j_urm));
            }
            else
                if(a[i][j]>=100000 and a[i_urm][j_urm]<0)
                {
                    x=i_urm;
                    y=j_urm;
                    l=a[i][j]-100000;
                    return 0;
                }
                else
                if(a[i][j]<0 and a[i_urm][j_urm]>=100000)
                {
                    x=i_urm;
                    y=j_urm;
                    l=a[i_urm][j_urm]-100000+1;
                    return 0;
                }
        }
    }
    return 0;
}

int main()
{
    fi>>n>>m;
    for(i=1;i<=n;i++)
    {
        fi.get();
        fi.get(c,101);
        for(j=0;j<=m-1;j++)
        {if(c[j]=='R')
        {
            ir=i;
            jr=j+1;
        }
        if(c[j]=='X')
        a[i][j+1]=1;
        if(c[j]=='J')
        {
            ij=i;
            jj=j+1;
        }}
    }
//    for(i=1;i<=n;i++)
//        {for(j=1;j<=m;j++)
//        fo<<a[i][j]<<" ";
//    fo<<endl;}
    lee(ir,jr,ij,jj);
    fo<<l<<" "<<x<<" "<<y;
}