Cod sursa(job #2637330)

Utilizator BogdanTicuTicu Bogdan Valeriu BogdanTicu Data 22 iulie 2020 14:54:03
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;

ifstream in("rj.in");
ofstream out("rj.out");

int di[9]={0, 0, 1, 0 , -1 , 1 , 1,-1,-1},dj[9]={0, 1 ,0 ,-1, 0 ,1 ,-1 ,-1,1},R[101][101],J[101][101];
string s;

void lee(int istart,int jstart,int n,int m,int ok)
{
	queue<pair<int , int>> q;
	if(ok==1) R[istart][jstart]=1;
	else J[istart][jstart]=1;
	q.push(make_pair(istart,jstart));
	while(q.size()>0)
	{
		int i=q.front().first;
		int j=q.front().second;
		for(int k=1;k<=8;k++)
		{
			int ivecin=i+di[k];
			int jvecin=j+dj[k];
			int p;
			if(ok==1) p=R[ivecin][jvecin];
			else p=J[ivecin][jvecin];
			if(ivecin>=1&&ivecin<=n&&jvecin>=1&&jvecin<=m&&p==0)
			{
				if(ok==1) R[ivecin][jvecin]=R[i][j]+1;
				else J[ivecin][jvecin]=J[i][j]+1;
				q.push(make_pair(ivecin,jvecin));
			}
		}
		q.pop();
	}
}

int main()
{
	int n,m,ir,jr,ij,jj,ok=1;
	in>>n>>m;
	in.get();
	for(int i=1;i<=n;i++)
	{
		getline(in,s);
		for(int j=0;j<m;j++)
		{
			if(s[j]=='X') 
			{
				R[i][j+1]=-1;
				J[i][j+1]=-1;
			}
			else if(s[j]=='R'){
				ir=i;
				jr=j+1;
			}
			else if(s[j]=='J'){
				ij=i;
				jj=j+1;
			}
		}
	}
	lee(ir,jr,n,m,1);
	lee(ij,jj,n,m,0);
	int minim=2000000000;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(R[i][j]==J[i][j]&&R[i][j]<minim&&R[i][j]>0)
				minim=R[i][j];
	out<<minim<<" ";
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
			if(R[i][j]==minim&&J[i][j]==R[i][j])
			{
				out<<i<<" "<<j<<"\n";
				ok=0;
				break;
			}
		if(ok==0) break;
	}
}