Cod sursa(job #1583007)

Utilizator mlapusteVlad Lapuste mlapuste Data 28 ianuarie 2016 17:52:00
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
queue <pair<int,int> >c1,c2;
int r[101][101],k[101][101];
int n,m,hh,hhh,vmin;
char x;
const int   di[8] = {-1, -1, 0, 1, 1, 1, 0, -1},dj[8] = {0, 1, 1, 1, 0, -1, -1, -1};
void read()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
    {
        x = fin.get();
        if(x == '\n')x = fin.get();
        if(x=='R'){r[i][j]=1;c1.push(make_pair(i,j));}
        if(x=='J'){k[i][j]=1;c2.push(make_pair(i,j));}
        if(x=='X')
        {
            r[i][j]=-1;
            k[i][j]=-1;
        }
        if(x==' '){r[i][j]=0;k[i][j]=0;}
       
    }
}
bool OK(int i, int j)
{
    if(i < 1 || j < 1 || i > n || j > m) 
        return false;
    if(k[i][j] == -1)
        return false;
    return true;
}
bool OK1(int i, int j)
{
    if(i < 1 || j < 1 || i > n || j > m) 
        return false;
    if(r[i][j] == -1)
        return false;
    return true;
}
void leer()
{
    int iurm,jurm,i,j;
    while(!c1.empty())
    {
        i=c1.front().first;
        j=c1.front().second;
        c1.pop();
        for(int g=0;g<8;g++)
        {
            iurm=i+di[g];
            jurm=j+dj[g];
            if(OK(iurm,jurm)&&r[iurm][jurm] == 0)
            {r[iurm][jurm]=r[i][j]+1; 
            c1.push(make_pair(iurm,jurm));}   
        }
    }
    
}
void leej()
{
    int iurm,jurm,i,j;
    while(!c2.empty())
    {
        i=c2.front().first;
        j=c2.front().second;
        c2.pop();
        for(int g=0;g<8;g++)
        {
            iurm=i+di[g];
            jurm=j+dj[g];
            if(OK1(iurm,jurm)&&k[iurm][jurm] == 0)
            {k[iurm][jurm]=k[i][j]+1; 
            c2.push(make_pair(iurm,jurm));}   
        }
    }
    
}
int main()
{
    read();
    leer();
    leej();
    
    for(int i=1;i<=n;i++)
    {for(int j=1;j<=m;j++)
    {if(r[i][j]==k[i][j]&&r[i][j]!=-1){vmin=r[i][j];hh=i;hhh=j;}
    }}
    fout<<vmin<<" "<<hh<<" "<<hhh;
}