Pagini recente » Cod sursa (job #2536163) | Cod sursa (job #1555752) | Cod sursa (job #2506677) | Cod sursa (job #3166677) | Cod sursa (job #79772)
Cod sursa(job #79772)
#include <fstream>
#include <memory>
using namespace std;
#define MaxN 110
int n, m, xr, yr, xj, yj;
char vLabirint[MaxN][MaxN];
int dx[8] = { -1, -1, -1, 0, 0, 1, 1, 1 };
int dy[8] = { -1, 0, 1,-1, 1,-1, 0, 1 };
void ReadData()
{
ifstream fin("rj.in");
fin >> n >> m;
for (int i=0, j; i<=n; i++)
{
fin.getline(vLabirint[i]+1, MaxN);
for (j=1; j<=m; j++)
if (vLabirint[i][j] == 'R') { xr = i, yr = j; }
else if (vLabirint[i][j] == 'J') { xj = i, yj = j; }
}
fin.close();
}
void WriteSolution(int x, int y,int tmin)
{
ofstream fout("rj.out");
fout << tmin <<' '<< x <<' '<< y;
fout.close();
}
void MutaPersonaj(int c[MaxN][MaxN], int t)
{
for (int i=1,j,k; i<=n; i++)
for (j=1; j<=m; j++)
if (c[i][j] == -1 && vLabirint[i][j] != 'X')
for (k=0; k<8; k++)
if (c[i+dx[k]][j+dy[k]] == t-1)
{c[i][j] = t; break;}
}
void SolveAndWriteSolution()
{
int cr[MaxN][MaxN], cj[MaxN][MaxN];
memset(cr, -1, sizeof(int) * MaxN * MaxN);
memset(cj, -1, sizeof(int) * MaxN * MaxN);
cj[xj][yj] = 0;
cr[xr][yr] = 0;
bool intalnit;
int i, j, t = 1;
do
{
intalnit = false;
MutaPersonaj(cj,t);
MutaPersonaj(cr,t);
++t;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
if (cr[i][j] == cj[i][j] && cr[i][j] != -1)
{ WriteSolution(i,j,t);
intalnit = true;
break; }
}
while (intalnit == false);
}
void main(void)
{
ReadData();
SolveAndWriteSolution();
}