Pagini recente » Cod sursa (job #2121301) | Cod sursa (job #715177) | Cod sursa (job #1856595) | Cod sursa (job #277231) | Cod sursa (job #2667996)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
int di[8] = {0, 0, 1, -1, -1, -1, 1, 1};
int dj[8] = {1, -1, 0, 0, -1, 1, -1, 1};
int N, M, MR[101][101], MJ[101][101], iJ, jJ, iR, jR;
queue < pair <int, int> > q;
bool ok(int i, int j)
{
if (i < 1 || j < 1 || i > N || j > M )
return false;
return true;
}
void Lee(int a[101][101])
{
while (!q.empty())
{
int x = q.front().first;
int y = q.front().second;
q.pop();
for (int p = 0; p < 8; p++)
{
int i = x + di[p];
int j = y + dj[p];
if (ok(i,j) && a[i][j] != -1 && a[x][y] + 1 < a[i][j] )
{
a[i][j] = a[x][y] + 1;
q.push({i,j});
}
}
}
}
int main()
{
ifstream fin("rj.in");
ofstream fout("rj.out");
fin >> N >> M;
int i,j, tmin = 10001, soli, solj;
char s[101];
fin.get();
for (i = 1; i <= N; i++)
{
fin.getline(s,101);
for (j = 0; j < M; j++)
{
cout << s[j];
if (s[j] == 'R')
{
iR = i;
jR = j+1;
MJ[i][j+1] = 10001;
}
else if (s[j] == 'J')
{
iJ = i;
jJ = j+1;
MR[i][j+1] = 10001;
}
else if (s[j] == 'X')
{
MR[i][j+1] = -1;
MJ[i][j+1] = -1;
}
else
{
MR[i][j+1] = 10001;
MJ[i][j+1] = 10001;
}
}
cout << endl;
}
for (i = 1; i <= N; i++)
{
for (j = 1; j <= M; j++)
cout << MR[i][j] << " ";
cout << endl;
}
cout << endl;
for (i = 1; i <= N; i++)
{
for (j = 1; j <= M; j++)
cout << MJ[i][j] << " ";
cout << endl;
}
q.push({iR, jR});
Lee(MR);
q.push({iJ, jJ});
Lee(MJ);
for (i = 1; i <= N; i++)
{
for (j = 1; j <= M; j++)
cout << MR[i][j] << " ";
cout << endl;
}
cout << endl;
for (i = 1; i <= N; i++)
{
for (j = 1; j <= M; j++)
cout << MJ[i][j] << " ";
cout << endl;
}
for (i = 1; i <= N; i++)
for (j = 1; j <= M; j++)
if (MR[i][j] == MJ[i][j] && MR[i][j] != -1 && MR[i][j] < tmin)
{
tmin = MR[i][j];
soli = i;
solj = j;
}
cout << tmin + 1<< " " << soli << " " << solj;
fin.close();
fout.close();
return 0;
}