Cod sursa(job #2558382)

Utilizator furfur233Fur Fur furfur233 Data 26 februarie 2020 15:47:11
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <bits/stdc++.h>

using namespace std;

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

long long n, m, mat[105][105], jul[105][105];
char chr;

const long long addLin[]={-1,-1,-1,0,1,1,1,0};
const long long addCol[]={-1,0,1,1,1,0,-1,-1};

struct Pos{
	long long lin, col;
};
Pos r, j;

void scan(){
	fin>>n>>m;
	for(long long i=1; i<=n; i++){
		fin.get();
		for(long long jo=1; jo<=m; jo++){
			fin.get(chr);
			if(chr=='X'){
				mat[i][jo]=jul[i][jo]=-1;
			}else if(chr=='R'){
				mat[i][jo]=1;
				r.lin=i;
				r.col=jo;
			}else if(chr=='J'){
				jul[i][jo]=1;
				j.lin=i;
				j.col=jo;
			}
		}
	}
}

void border(){
	for(long long i=0; i<=n+1; i++){
		mat[i][0]=mat[i][n+1]=-1;
		jul[i][0]=jul[i][n+1]=-1;
	}
	for(long long j=1; j<=m+1; j++){
		mat[0][j]=mat[n+1][j]=-1;
		jul[0][j]=jul[n+1][j]=-1;
	}
	
}
Pos q[105*105];
Pos ngh, a;
int in=0, sf=0;
void lee(){
	q[0]=r;
	while(in<=sf){
		a=q[in++];
		for(int i=0; i<8; i++){
			ngh.lin=a.lin+addLin[i];
			ngh.col=a.col+addCol[i];
			if(mat[ngh.lin][ngh.col]==0){
				mat[ngh.lin][ngh.col]=mat[a.lin][a.col]+1;
				q[++sf]=ngh;
			}
		}
	}
	in=0, sf=0;
	q[0]=j;
	while(in<=sf){
		a=q[in++];
		for(int io=0; io<8; io++){
			ngh.lin=a.lin+addLin[io];
			ngh.col=a.col+addCol[io];
			if(jul[ngh.lin][ngh.col]==0){
				jul[ngh.lin][ngh.col]=jul[a.lin][a.col]+1;
				q[++sf]=ngh;
			}
		}
	}
}
long long minim=10005;
Pos coord;
void solutie(){
	for(long long i=1; i<=n; i++){
		for(long long j=1; j<=m; j++){
			if(mat[i][j]==jul[i][j] && mat[i][j]>0 && mat[i][j]<minim){
				minim=mat[i][j];
				coord.lin=i;
				coord.col=j;
			}
		}
	}
	fout<<minim<<" "<<coord.lin<<" "<<coord.col;
}

int main(){
	scan();
	border();
	lee();
	solutie();
}