Cod sursa(job #2637273)

Utilizator BogdanTicuTicu Bogdan Valeriu BogdanTicu Data 22 iulie 2020 11:18:18
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 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;
	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=(J[ir][jr]+1)/2;
	cout<<minim<<" ";
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
			if(R[i][j]==minim&&J[i][j]==minim)
			{
				cout<<i<<" "<<j<<"\n";
				break;
			}
	}
}