Pagini recente » Cod sursa (job #295254) | Cod sursa (job #470942) | Cod sursa (job #1929065) | Cod sursa (job #568913) | Cod sursa (job #1583007)
#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;
}