Cod sursa(job #1629022)

Utilizator beatrice01Ferco Beatrice beatrice01 Data 4 martie 2016 12:11:20
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <string.h>
using namespace std;
ifstream fin ("rj.in");
ofstream fout ("rj.out");

int dx[]={-1,0,1,0,-1,-1,1,1};
int dy[]={0,1,0,-1,-1,1,1,-1};
int n, m, ro[105][105], ju[105][105], rx,ry, jx,jy , xfin,yfin, smin= 10000;
queue < pair <int,int> > c;
pair <int,int> inc, actual, vecin;
char linia[101];

bool ok (int x,int y,int a[][105] )
{
    return a[x][y]==0 && x<=n && x>=1 && y<=m && y>=1 ;
}

void lee (int a[][105] )
{
    while ( c.size() )
    {
        actual= c.front();
        c.pop();
        for(int i=0; i<8; i++)
        {
            vecin.first= actual.first + dx[i];
            vecin.second= actual.second + dy[i];
            if ( ok( vecin.first, vecin.second, a ) )
              {
                 a[vecin.first][vecin.second]= a[actual.first][actual.second] + 1;
                 c.push (vecin);
              }
        }

    }
}

int main()
{
    fin>>n>>m;
    fin.get();
    for(int i=1;i<=n; i++)

      {

        fin.getline(linia,101);
        for(int j=0;j<strlen(linia);j++)
        {

          if( linia[j]== 'X' ) ro[i][j+1]= ju[i][j+1]= -1;
          if( linia[j]== 'R' )
          {
              ro[i][j+1]= 1;
              rx=i;
              ry=j+1;
          }
          if( linia[j]== 'J' )
          {
              ju[i][j+1]= 1;
              jx=i;
              jy=j+1;
          }
        }
      }

    inc.first= rx;
    inc.second= ry;
    c.push(inc);
    lee(ro);

    inc.first= jx;
    inc.second= jy;
    c.push(inc);
    lee(ju);


    for (int i=1;i<=n;i++)
       for (int j=1;j<=m;j++)
        if ( ro[i][j]==ju[i][j] && ro[i][j]>0 )
           if (ro[i][j] <smin)
         { smin= ro[i][j];
          xfin=i;
          yfin=j;
         }
  fout<<ro[xfin][yfin]<<" "<<xfin<<" "<<yfin<<" ";
return 0;
}