Cod sursa(job #1322555)

Utilizator eduardcazacuEduard Cazacu eduardcazacu Data 20 ianuarie 2015 09:44:00
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.1 kb
#include <fstream>
#include <iomanip>
#include <cstring>

using namespace std;

ifstream f("rj.in");
ofstream g("rj.out");

int n,m,a[101][101]= {};
struct coord
{
    int x,y;
} rom,jul,cJ[101],cR[101],pJ,pR,vJ,vR;

void citire()
{
    char c,linie[101];
    f>>n>>m;
    f.get();
    for(int i=1; i<=n; i++)
    {
        f.getline(linie,101);
        for(int j=0; j<m; j++)
        {
            c=linie[j];
            if(c=='R')
            {
                rom.x=i,rom.y=j+1;
            }
            else if(c=='J')
            {
                jul.x=i;
                jul.y=j+1;
            }
            else if(c=='X')a[i][j+1]=-1;
        }
    }

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

void parcurge()
{
    int nrDir=4,Rprim=0,Rultim=0,Jprim=0,Jultim=0;

    cJ[0]=jul;
    cR[0]=rom;
    a[jul.x][jul.y]=1;
    a[rom.x][rom.y]=1;
    vR=rom;
    vJ=jul;
    int dl[]= {-1,0,1,0};
    int dc[]= {0,1,0,-1};

    while(Jprim<=Jultim && Rprim<=Rultim && vJ.x!=vR.x && vJ.y!=vR.y)
    {
        pJ=cJ[Jprim];
        pR=cR[Rprim];
        Jprim++;
        Rprim++;

        for(int k=0; k<nrDir; k++)
        {
            vR.x=pR.x+dl[k];
            vR.y=pR.y+dc[k];
            vJ.x=pJ.x+dl[k];
            vJ.y=pJ.y+dc[k];

            if(a[vR.x][vR.y]==0){
                a[vR.x][vR.y]=a[pR.x][pR.y]+1;
                Rultim++;
                cR[Rultim]=vR;
                //if(cR[Rultim].x==cJ[Jultim].x && cR[Rultim].y==cJ[Jultim].y)break;
            }
            if(a[vJ.x][vJ.y]==0){
                a[vJ.x][vJ.y]=a[pJ.x][pJ.y]+1;
                Jultim++;
                cJ[Jultim]=vJ;
                //if(cR[Rultim].x==cJ[Jultim].x && cR[Rultim].y==cJ[Jultim].y)break;
            }
        }

    }
    g<<a[cR[Rultim].x][cR[Rultim].y]-1<<" "<<cR[Rultim].x<<" "<<cR[Rultim].y<<'\n';

}

int main()
{
    citire();
    bordare();
    parcurge();
    return 0;
}