Cod sursa(job #3342864)

Utilizator nverde1119Popa Narcis Constantin nverde1119 Data 25 februarie 2026 22:21:24
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;
int n, m, A[102][102], B[102][102],
    dx[] = {1, -1, 0, 0, 1, 1, -1, -1},
           dy[] = {0, 0, 1, -1, 1, -1, -1, 1};
ifstream f("rj.in");
ofstream g("rj.out");
struct  po
{
	int x, y;
};
po r, ji;
void citire()
{
	char c;
	f >> n >> m;
	f.get();
	for(int i = 1; i <= n; i++)
	{
		for(int j = 1; j <= m; j++)
		{
			f.get(c);
			if(c == 'X')
				A[i][j] = B[i][j] = -1;
			else
				if(c == 'R')
				{
					r = {i, j};
				}
				else
					if(c == 'J')
					{
						ji = {i, j};
					}
		}
		f.get();
	}
}
void bordare()
{
	for(int j = 0; j <= m + 1; j++)
		A[0][j] = A[n + 1][j] = B[0][j] = B[n + 1][j] = -1;
	for(int i = 1; i <= n; i++)
		A[i][0] = A[i][m + 1] = B[i][0] = B[i][m + 1] = -1;
}
void lee(po xy, int C[102][102])
{
	queue<po>Q;
	Q.push(xy);
	C[xy.x][xy.y] = 1;
	po vec, crt;
	while(!Q.empty())
	{
		crt = Q.front();
		Q.pop();
		for(int k = 0; k < 8; k++)
		{
			vec.x = crt.x + dx[k];
			vec.y = crt.y + dy[k];
			if(C[vec.x][vec.y] == 0)
			{
				C[vec.x][vec.y] = C[crt.x][crt.y] + 1;
				Q.push(vec);
			}
		}
	}
}
int main()
{
	citire();
	bordare();
	lee(r, A);
	lee(ji, B);
	po minn = {1000, 1000};
	int minn1 = 1000;
	for(int i = 1; i <= n; i++)
	{
		for(int j = 1; j <= m; j++)
		{
			if(A[i][j] == B[i][j] && A[i][j] >0)
			{
				if(A[i][j] < minn1)
				{
					minn1 = A[i][j];
					minn = {i, j};
				}
			}
		}
	}
	g << minn1 << ' ' << minn.x << ' ' << minn.y;
	return 0;
}