Pagini recente » Cod sursa (job #2877933) | Cod sursa (job #3217434) | Cod sursa (job #2730532) | Cod sursa (job #3252098) | Cod sursa (job #1712682)
#include <fstream>
using namespace std;
int main()
{
ifstream ii("rj.in");
ofstream oo("rj.out");
struct pct
{
short i, j;
pct(short a, short b) {i = a; j = b;}
pct(){}
} decal[8] = {pct(-1, -1), pct(-1, 0), pct(-1, 1), pct(0, -1),
pct(0, 1), pct(1, -1), pct(1, 0), pct(1, 1)};
short n = 0, m = 0, i, j, k;
ii >> n >> m; ii.get();
char a[n][m+1]; short marcrom[n+1][m+1], marcjul[n+1][m+1];
pct rom[n*m+1], jul[n*m+1], sol[n*m+1]; short dimr = 1, dimj = 1;
short soli = n, solj = m, solt = n*m;
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
marcrom[i][j] = marcjul[i][j] = -1;
for (i = 0; i < n; i++)
{
ii.getline(a[i], m+1);
if (!ii.gcount())
for (j = 0; j < m; j++)
a[i][j] = ' ';
else for (j = ii.gcount()-1; j < m; j++)
a[i][j] = ' ';
for (j = 0; j < m; j++)
if (a[i][j] == 'R')
rom[0].i = i, rom[0].j = j, marcrom[i][j] = 0;
else if (a[i][j] == 'J')
jul[0].i = i, jul[0].j = j, marcjul[i][j] = 0;
}
for (i = 0; i < dimr; i++) // ROMEO
{
for (j = 0; j < 8; j++)
{
rom[dimr].i = rom[i].i + decal[j].i;
rom[dimr].j = rom[i].j + decal[j].j;
if (rom[dimr].i < 0 || rom[dimr].i > n-1) //
continue; // Daca iese din bounds
if (rom[dimr].j < 0 || rom[dimr].j > m-1) //
continue;
if (marcrom[rom[dimr].i][rom[dimr].j] > -1) // S-a parcurs deja
continue;
if (a[rom[dimr].i][rom[dimr].j] == 'X') // Inaccesibil
continue;
marcrom[rom[dimr].i][rom[dimr].j] = marcrom[rom[i].i][rom[i].j] + 1;
dimr++;
}
}
for (i = 0; i < dimj; i++) // JULIETA
{
for (j = 0; j < 8; j++)
{
jul[dimj].i = jul[i].i + decal[j].i;
jul[dimj].j = jul[i].j + decal[j].j;
if (jul[dimj].i < 0 || jul[dimj].i > n-1) //
continue; // Daca iese din bounds
if (jul[dimj].j < 0 || jul[dimj].j > m-1) //
continue;
if (marcjul[jul[dimj].i][jul[dimj].j] > -1) // S-a parcurs deja
continue;
if (a[jul[dimj].i][jul[dimj].j] == 'X') // Inaccesibil
continue;
marcjul[jul[dimj].i][jul[dimj].j] = marcjul[jul[i].i][jul[i].j] + 1;
dimj++;
}
}
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
if (marcrom[i][j] == marcjul[i][j] && marcrom[i][j] <= solt && marcrom[i][j] >= 0)
{
if (marcrom[i][j] < solt)
{
solt = marcrom[i][j];
soli = i; solj = j;
}
else if (i < soli)
{
solt = marcrom[i][j];
soli = i; solj = j;
}
else if (i == soli && j < solj)
{
solt = marcrom[i][j];
soli = i; solj = j;
}
}
oo << solt+1 << ' ' << soli+1 << ' ' << solj+1;
}