Cod sursa(job #604894)

Utilizator predator5047Butiu Alexandru Octavian predator5047 Data 25 iulie 2011 21:27:35
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.78 kb
#include <fstream>
#include <iostream>
using namespace std;
short int r[101][101],jl[101][101],n,m,srx,sry,sjx,sjy;
void citire(); void Romeo(); void Julieta(); void afisare();
int main()
{
    citire();
    Romeo();
    Julieta();
    afisare();
    return 0;
}
void Romeo()
{
    const short int dx[]={1,0,-1,0,1,-1,1,-1};
    const short int dy[]={0,1,0,-1,1,-1,-1,1};
    struct Coada
    {
        short int x;
        short int y;
    }q[10202];
    q[1].x=srx;
    q[1].y=sry;
    int SfC=1,StC=0;
    int x2,y2;
    while(StC<=SfC)
    {
        StC++;
        for(int i=0;i<8;i++)
        {
            x2=q[StC].x+dx[i]; y2=q[StC].y+dy[i];
            if(r[x2][y2]==-1&&x2>=1&&y2>=1&&x2<=n&&y2<=m)
            {
                SfC++;
                q[SfC].x=x2;
                q[SfC].y=y2;
                r[x2][y2]=r[q[StC].x][q[StC].y]+1;
            }
        }
    }
}
void Julieta()
{
    const short int dx[]={1,0,-1,0,1,-1,1,-1};
    const short int dy[]={0,1,0,-1,1,-1,-1,1};
    struct Coada
    {
        short int x;
        short int y;
    }q[10202];
    q[1].x=sjx;
    q[1].y=sjy;
    int SfC=1,StC=0;
    int x2,y2;
    while(StC<=SfC)
    {
        StC++;
        for(int i=0;i<8;i++)
        {
            x2=q[StC].x+dx[i]; y2=q[StC].y+dy[i];
            if(jl[x2][y2]==-1&&x2>=1&&y2>=1&&x2<=n&&y2<=m)
            {
                SfC++;
                q[SfC].x=x2;
                q[SfC].y=y2;
                jl[x2][y2]=jl[q[StC].x][q[StC].y]+1;
            }
        }
    }
}
void afisare()
{
    int pasmin=9999999,x=-1,y=-1;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(r[i][j]==jl[i][j]&&r[i][j]<pasmin)
            {
                if(r[i][j]>0)
                {
                    pasmin=r[i][j];
                    x=i;
                    y=j;
                }
            }
        }
    }
    ofstream fout("rj.out");
    fout<<pasmin<<" "<<x<<" "<<y;
    fout.close();
}

void citire()
{
    ifstream fin("rj.in");
    fin>>n>>m;
    char aux[101];
    for(int i=1;i<=n;i++)
    {
        fin.get();
        fin.get(aux,101);
        for(int j=0;j<m;j++)
        {

            if(aux[j]=='R')
            {
                r[i][j+1]=1;
                jl[i][j+1]=-2;
                srx=i;
                sry=j+1;
            }
            else if(aux[j]=='J')
            {
                jl[i][j+1]=1;
                r[i][j+1]=-2;
                sjx=i;
                sjy=j+1;
            }
            else if(aux[j]==' ')
            {
                jl[i][j+1]=r[i][j+1]=-1;
            }
            else
            {
                jl[i][j+1]=r[i][j+1]=-2;
            }
        }
    }
    fin.close();
}