Cod sursa(job #3261386)

Utilizator Alexutu008Ionita Alexandru-Dumitru Alexutu008 Data 5 decembrie 2024 18:20:00
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.87 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("date.in");
ofstream g("date.out");
int R[101][101], J[101][101];
char c;
int n, m;
int ir, jr, ij, jj;
int di[] = { -1, -1, -1, 0 , 0 , 1, 1, 1 };
int dj[] = { -1, 0, 1, -1, 1, -1, 0, 1 };
struct rasp
{
	int x, y, d = 25000;
}z;
int inmat(int i, int j)
{
	return i >= 1 && j >= 1 && i <= n && j <= m;
}
void lee(int m[][101], int i, int j)
{
	queue <pair<int, int>> q;
	q.push({ i, j });
	while (!q.empty())
	{
		int x = q.front().first;
		int y = q.front().second;
		q.pop();
		for (int i = 0; i < 8; ++i)
		{
			int in = x + di[i];
			int jn = y + dj[i];
			if (inmat(in, jn))
				if (m[in][jn] == 0 || m[in][jn] > m[x][y] + 1)
				{
					m[in][jn] = m[x][y] + 1;
					q.push({ in, jn });
				}
		}
	}
}
int main()
{

	f >> n >> m;
	f.ignore();
	for (int i = 1; i <= n; ++i)
	{

		for (int j = 1; j <= m; ++j)
		{
			f.get(c);
			if (c == 'X')
				R[i][j] = J[i][j] = -1;
			else if (c == 'R')
			{
				R[i][j] = 1;
				ir = i;
				jr = j;
			}
			else if (c == 'J')
			{
				J[i][j] = 1;
				ij = i;
				jj = j;
			}
		}
		f.ignore();
	}
	lee(R, ir, jr);
	lee(J, ij, jj);
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= m; ++j)
			if (R[i][j] == 0)
				R[i][j] = -1;
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= m; ++j)
			if (J[i][j] == 0)
				J[i][j] = -1;
	
	for (int i = 1; i <= n; ++i)
{
	for (int j = 1; j <= m; ++j)
		cout << R[i][j] << ' ';
	cout << '\n';
}
cout << "-------------------"<<'\n';
for (int i = 1; i <= n; ++i)
{
	for (int j = 1; j <= m; ++j)
		cout << J[i][j] << ' ';
	cout << '\n';
}
cout << "-------------------" << '\n';
	
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= m; ++j)
			if (R[i][j] == J[i][j] && z.d > R[i][j] && R[i][j] != -1)
				z.d = R[i][j], z.x = i, z.y = j;
	g << z.d << ' ' << z.x << ' ' << z.y;
}