Pagini recente » Cod sursa (job #2711931) | Cod sursa (job #2433697) | Cod sursa (job #1874274) | Cod sursa (job #2602945) | Cod sursa (job #2371057)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
queue < pair < int, int > > rom;
queue < pair < int, int > > jul;
int n, m;
int a[105][105];
int di[] = {-1, -1, 0, 1, 1, 1, 0, -1};
int dj[] = { 0, 1, 1, 1, 0, -1, -1, -1};
char c;
int startxr, startyr, startxj, startyj;
int stopx, stopy;
void Read()
{
f >> n >> m;
char linie[105];
f.get();
for(int i=1; i<=n; i++) {
f.getline(linie,256);
for(int j=0; j<=m-1; j++) {
if(linie[j] == 'X') a[i][j+1] = -1;
else if(linie[j] == 'R') {a[i][j+1] = 1; startxr = i; startyr = j+1;}
else if(linie[j] == 'J') {a[i][j+1] = 2; startxj = i; startyj = j+1;}
else if(linie[j]==' ') a[i][j+1] = 0;
}
}
}
bool ok(int i, int j)
{
if(i<1 || j<1 || i>n || j>m)
return false;
if(a[i][j]==-1)
return false;
return true;
}
void Lee()
{
int iRom, jRom, iJul, jJul;
int iRomNext, jRomNext, iJulNext, jJulNext;
rom.push(make_pair(startxr, startyr));
jul.push(make_pair(startxj, startyj));
while(!rom.empty() && !jul.empty()) {
iRom = rom.front().first;
jRom = rom.front().second;
rom.pop();
iJul = jul.front().first;
jJul = jul.front().second;
jul.pop();
for(int dir = 0; dir < 8; dir++) {
iRomNext = iRom + di[dir];
jRomNext = jRom + dj[dir];
iJulNext = iJul + di[dir];
jJulNext = jJul + dj[dir];
if(ok(iRomNext, jRomNext) && a[iRomNext][jRomNext] ==0) {
a[iRomNext][jRomNext] = 1 + a[iRom][jRom];
rom.push(make_pair(iRomNext, jRomNext));
stopx=iRomNext; stopy=jRomNext;
}
if(ok(iJulNext, jJulNext) && a[iJulNext][jJulNext] ==0) {
a[iJulNext][jJulNext] = 1 + a[iJul][jJul];
jul.push(make_pair(iJulNext, jJulNext));
}
}
}
}
int main()
{
Read();
Lee();
g << a[stopx][stopy] << ' ' << stopx << ' ' << stopy;
return 0;
}