Pagini recente » Cod sursa (job #1663142) | Cod sursa (job #1190630) | Profil 6qqqqqq | Cod sursa (job #2968389) | Cod sursa (job #2486342)
#include <iostream>
#include <queue>
#include <cstring>
#include <fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
queue < pair < int, int > > coada;
int romeo[101][101],julieta[101][101],i,j,n,m,poziromeo,pozjromeo,pozijulieta,pozjjulieta;
char c[101];
int di[8]= {-1,1,0,1,1,1,0,-1};
int dj[8]= {0,-1,1,1,0,-1,-1,-1};
bool okromeo(int i, int j)
{
if(i<1 || j<1 || j>m || i>n)
return false;
if(romeo[i][j]==-1)
return false;
return true;
}
bool okjulieta(int i, int j)
{
if(i<1 || j<1 || j>m || i>n)
return false;
if(julieta[i][j]==-1)
return false;
return true;
}
void leejulieta()
{
int distanta,i_nou,j_nou;
julieta[pozijulieta][pozjjulieta]=1;
coada.push(make_pair(pozijulieta,pozjjulieta));
while(coada.empty()==0)
{
i=coada.front().first;
j=coada.front().second;
coada.pop();
for(distanta=0;distanta<8;distanta++)
{
i_nou=i+di[distanta];
j_nou=j+dj[distanta];
if(okjulieta(i_nou,j_nou)==1)
{
if(julieta[i_nou][j_nou]==0)
{
julieta[i_nou][j_nou]=julieta[i][j]+1;
coada.push(make_pair(i_nou,j_nou));
}
}
}
}
}
void leeromeo()
{
int distanta,i_nou,j_nou;
romeo[poziromeo][pozjromeo]=1;
coada.push(make_pair(poziromeo,pozjromeo));
while(coada.empty()==0)
{
i=coada.front().first;
j=coada.front().second;
coada.pop();
for(distanta=0;distanta<8;distanta++)
{
i_nou=i+di[distanta];
j_nou=j+dj[distanta];
if(okromeo(i_nou,j_nou)==1)
{
if(romeo[i_nou][j_nou]==0)
{
romeo[i_nou][j_nou]=romeo[i][j]+1;
coada.push(make_pair(i_nou,j_nou));
}
}
}
}
}
int main()
{
f>>n>>m;
f.get();
for(i=1;i<=n;i++)
{
f.getline(c,101);
j=1;
for(int p=0;p<strlen(c);p++)
{
if(c[p]=='X')
{
romeo[i][j]=-1;
julieta[i][j]=-1;
}
if(c[p]==' ')
{
romeo[i][j]=0;
julieta[i][j]=0;
}
if(c[p]=='R')
{
julieta[i][j]=-1;
poziromeo=i;
pozjromeo=j;
}
if(c[p]=='J')
{
romeo[i][j]=-1;
pozijulieta=i;
pozjjulieta=j;
}
j++;
}
}
leeromeo();
leejulieta();
int minim=99999,poz1,poz2;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(romeo[i][j]==julieta[i][j])
if(romeo[i][j]>0 && julieta[i][j]>0)
if(romeo[i][j]<minim)
{
minim=julieta[i][j];
poz1=i;
poz2=j;
}
}
}
g<<minim<<" "<<poz1<<" "<<poz2;
return 0;
}