Cod sursa(job #1372910)

Utilizator Cezaradrian27Cezar Adrian Cezaradrian27 Data 4 martie 2015 15:46:43
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.83 kb
#include <fstream>
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");

struct poz
{
    int x,y;
};

queue <poz> q;
int n,m;
poz auxr, auxj;
char v[110];
int ra[105][105], ja[105][105];
int ox[]={ 1, 0,-1, 0, 1,-1, 1,-1};
int oy[]={ 0, 1, 0,-1,-1, 1, 1,-1};

void citire ()
{
    int i,j;
    fin.get();
    for(i=1; i<=n; i++)
    {
        fin.getline(v,m+1);
       for(j=0;j<strlen(v); j++)
        {


            if( v[j]== 'X') ra[i][j+1]=ja[i][j+1]=-1;
            if( v[j] == 'R')
            {
                ra[i][j+1]=1;
                auxr.x=i;
                auxr.y=j+1;
            }
            if(v[j] == 'J')
            {
                ja[i][j+1]=1;
                auxj.x=i;
                auxj.y=j+1;

            }
        }
    }

}

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

void leeR()
{
    q.push(auxr);
    int k;
    while(!q.empty())
    {
        for(k=0;k<8; k++)
        {
            auxr.x=q.front().x+ox[k];
            auxr.y=q.front().y+oy[k];
            if(ra[auxr.x][auxr.y] == 0)
            {
                ra[auxr.x][auxr.y]=ra[q.front().x][q.front().y]+1;
                q.push(auxr);
            }
        }
        q.pop();
    }
}

void leeJ()
{
    q.push(auxj);
    int k;
    while(!q.empty())
    {
        for(k=0;k<8; k++)
        {
            auxj.x=q.front().x+ox[k];
            auxj.y=q.front().y+oy[k];
            if(!ja[auxj.x][auxj.y])
            {
                ja[auxj.x][auxj.y]=ja[q.front().x][q.front().y]+1;
                q.push(auxj);
            }
        }
        q.pop();
    }
}

void afisareR()
{
    int i,j;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
            if(ra[i][j]==-1 || ra[i][j]>9)
            cout<<ra[i][j];
        else
          cout<<ra[i][j]<<" ";
        cout<<'\n';
    }
}

void afisareJ()
{
    int i,j;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
            if(ja[i][j]==-1 || ja[i][j]>9)
               cout<<ja[i][j];
        else
           cout<<ja[i][j]<<" ";
        cout<<'\n';
    }
}
int main()
{
     int i,j,nmin, mini=-1,minj=-1;

     fin>>n>>m;
    citire();
    bordare();


    leeJ();
    leeR();

    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)

              if(ra[i][j]== ja[i][j] && ra[i][j]> 0)
              {
                  if(ra[i][j]< nmin)
                 {
                    nmin=ra[i][j];
                    mini=i;
                    minj=j;

                 }
              }




     fout<<nmin<<" "<<mini<<" "<<minj;

    return 0;
}