Pagini recente » Cod sursa (job #1684404) | Cod sursa (job #674508) | Cod sursa (job #1802444) | concurs_luigi | Cod sursa (job #2475546)
#include <fstream>
#include <string.h>
#include <queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
char s[256];
long i,j,n,m,pozx,pozy,xj,yj,xr,yr,minn,matr[101][101],matj[101][101];
const int dirx[]= {-1,1,0,0,1,-1};
const int diry[]= {0,0,1,-1,-1,1};
bool OKR(int i,int j)
{
if(i<1||j<1||i>n||j>n) return false;
if(matr[i][j]==-1) return false;
return true;
}
bool OKJ(int i,int j)
{
if(i<1||j<1||i>n||j>n) return false;
if(matj[i][j]==-1) return false;
return true;
}
void leeR(int is, int js)
{queue < pair <int,int> > coada;
int i,j;
matr[is][js]=1;
coada.push(make_pair(is,js));
int iurm,jurm,directie;
while(!coada.empty())
{
i=coada.front().first;
j=coada.front().second;
coada.pop();
for(directie=0; directie<8; directie++)
{
iurm=i+dirx[directie];
jurm=j+diry[directie];
if(OKR(iurm,jurm)&&matr[iurm][jurm]<1)
{
matr[iurm][jurm]=matr[i][j]+1;
coada.push(make_pair(iurm,jurm));
}
}
}
}
void leeJ(int is, int js)
{queue < pair <int,int> > coada;
int i,j;
matj[is][js]=1;
coada.push(make_pair(is,js));
int iurm,jurm,directie;
while(!coada.empty())
{
i=coada.front().first;
j=coada.front().second;
coada.pop();
for(directie=0; directie<8; directie++)
{
iurm=i+dirx[directie];
jurm=j+diry[directie];
if(OKJ(iurm,jurm)&&matj[iurm][jurm]<1)
{
matj[iurm][jurm]=matj[i][j]+1;
coada.push(make_pair(iurm,jurm));
}
}
}
}
int main()
{
f>>n>>m;minn=100000;
f.get();
for(i=1; i<=n; i++)
{
f.getline(s,256);
for(j=0; j<m; j++)
if(s[j]=='X') {matr[i][j+1]=-1;matj[i][j+1]=-1;}
else if(s[j]==' ') {matr[i][j+1]=0;matj[i][j+1]=0;}
else if(s[j]=='R') {xr=i;yr=j+1;}
else if(s[j]=='J') {xj=i;yj=j+1;}
}
leeR(xr,yr);
leeJ(xj,yj);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(matr[i][j]==matj[i][j]&&matr[i][j]>0&&matj[i][j]>0) if(matr[i][j]<minn) {minn=matr[i][j];
pozx=i;
pozy=j;
}
g<<minn-1<<" "<<pozx<<" "<<pozy;
return 0;
}