Pagini recente » Cod sursa (job #2937843) | Cod sursa (job #2298809) | Cod sursa (job #655843) | Cod sursa (job #1394576) | Cod sursa (job #1993750)
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
string z;
short n, m, i, j, nr, rj[103][103], prim, ultim, k, t, x, y;
short dl[]={-1, -1, 0, 1, 1, 1, 0, -1}, cl[]={0, -1, -1, -1, 0, 1, 1, 1};
struct oras
{ short lin, col; } c[120000], pr, pj, ve, p;
int main () {
fin >> n >> m;
getline(fin, z);
for (i = 1; i <= n; i++)
{
getline(fin, z);
for (j = 0; j < z.size(); j++)
{
if (z[j]=='R')
{ pr.lin = i; pr.col = j+1; }
if (z[j]=='J')
{ pj.lin = i; pj.col = j+1; }
else if (z[j]=='X')
rj[i][j+1] = 10017;
else rj[i][j+1]=0;
}
}
rj[pr.lin][pr.col]=-1;
rj[pj.lin][pj.col]=1;
c[1]=pr; c[0]=pj;
prim=0; ultim=1;
bool ok = 0;
while (prim <= ultim && ok == 0)
{
p=c[prim]; prim++;
for (k = 0; k < 8; k++)
{
ve.lin = p.lin+dl[k]; ve.col = p.col+cl[k];
if (((rj[ve.lin][ve.col] > 0 && rj[p.lin][p.col] < 0) || (rj[ve.lin][ve.col] < 0 && rj[p.lin][p.col] > 0)) && rj[ve.lin][ve.col] != 10017 && rj[ve.lin][ve.col] != rj[p.lin][p.col])
{
t = abs(rj[ve.lin][ve.col]); ok = 1;
}
if (rj[ve.lin][ve.col] == 0 && ve.lin > 0 && ve.lin <= n && ve.col > 0 && ve.col <= n)
{
if (rj[p.lin][p.col] > 0) rj[ve.lin][ve.col]=rj[p.lin][p.col]+1;
if (rj[p.lin][p.col] < 0) rj[ve.lin][ve.col]=rj[p.lin][p.col]-1;
ultim++; c[ultim]=ve;
}
}
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= m; j++)
cout << rj[i][j] << " ";
cout << "\n";
}
i = 1; j = 1;
bool k1=0, k2=0;
while (k1 == 0 || k2 == 0)
{
k1 = 0; k2 = 0;
p.lin = i; p.col = j;
if (rj[i][j] == t || rj[i][j] == t*-1)
{
for (k = 0; k < 8; k++)
{
ve.lin = p.lin+dl[k]; ve.col = p.col+cl[k];
if (rj[ve.lin][ve.col] == t-1) k1 = 1;
if (rj[ve.lin][ve.col] == (t-1)*-1) k2 = 1;
}
}
if (k1 == 1 && k2 == 1)
{ x = i; y = j; }
if (j < m) j++;
if (j == m) { j = 1; i++; }
}
t--;
fout << t << " " << x << " " << y << "\n";
}