Cod sursa(job #2633358)

Utilizator etohirseCristi Cretu etohirse Data 7 iulie 2020 12:41:09
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <bits/stdc++.h>
using namespace std;

const int mxN=105;
int dx[8]={0, 1, 0, -1, -1, 1, -1, 1};
int dy[8]={1, 0, -1, 0, -1, 1,  1,-1};
int n, m, xr, xj, yr, yj, matr[mxN][mxN], matj[mxN][mxN];
int xmin=-1, jmin=-1, ans=mxN*mxN+5;
char c, a[mxN][mxN];
queue<pair<int,int>>cords;

inline bool ok(int i, int j){
	return i&&j&&i<=n&&j<=m;
}

void Lee(int x, int y, int mat[mxN][mxN]){
	for(int i=1; i<=n; ++i)
		for(int j=1; j<=m; ++j)
			mat[i][j]=-1;
	cords.push({x,y});
	mat[x][y]=1;
	while(!cords.empty()){
		int i = cords.front().first;
		int j = cords.front().second;
		cords.pop();
		for(int k=0; k<8; ++k){
			int ni = i + dx[k];
			int nj = j + dy[k];
			if(ok(ni,nj)&&mat[ni][nj]==-1&&a[ni][nj]==' '){
				mat[ni][nj]=1+mat[i][j];
				cords.push({ni,nj});
			}
		}
	}
}

int main(){
	ifstream cin("rj.in");
	ofstream cout("rj.out");
	cin >> n >> m;
	cin.get(c);
	for(int i=1; i<=n; ++i){
		for(int j=1; j<=m; ++j){
			cin.get(c);
			a[i][j]=c;
			if(a[i][j]=='R'){
				xr=i;
				yr=j;
				a[i][j]=' ';
			}
			else if(a[i][j]=='J'){
				xj=i;
				yj=j;
				a[i][j]=' ';
			}
		}
		cin.get(c);
	}
	Lee(xr,yr,matr);
	Lee(xj,yj,matj);
	for(int i=1; i<=n; ++i)
		for(int j=1; j<=m; ++j)
			if(matr[i][j]==matj[i][j]&&matr[i][j]<ans&&matr[i][j]!=-1)
				ans=matr[i][j], xmin=i, jmin=j;
	cout << ans << ' ' << xmin << ' ' << jmin;
				
			
	
}