Cod sursa(job #2294109)

Utilizator mihai2003LLL LLL mihai2003 Data 1 decembrie 2018 21:59:33
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <queue>
#include <limits.h>
#include <iostream>

std::ifstream in("rj.in");
std::ofstream out("rj.out");
struct poz{
	int x,y;
};

std::queue<poz> q;
int n,m,x1,y1,x2,y2,min=1<<30,x3,y3;
int dx[]={-1,0,1,0};
int dy[]={0,1,0,-1};
int mat[101][101];
int viz[101][101][2];
char c;

bool check(int x,int y){
	return (x>=1 && y>=1 && x<=n && y<=m);
}
void lee(int x,int y,int nr){
	q.push({x,y});
	while(!q.empty()){
		poz p=q.front();
		q.pop();
		for(int i=0;i<4;i++){
			poz a={p.x+dx[i],p.y+dy[i]};
			if(check(a.x,a.y) && viz[a.x][a.y][nr]>viz[p.x][p.y][nr]+1 && mat[a.x][a.y]!=-1)
				viz[a.x][a.y][nr]=viz[p.x][p.y][nr]+1,q.push(a);
		}
	}
}
int main(){
	in>>n>>m>>std::ws;
	for(int i=1;i<=n;i++){
		std::string s;
		std::getline(in,s);
		s.insert(s.begin(),' ');
		for(int j=1;j<=m;j++){
			c=s[j];
			if(c=='R')
				x1=i,y1=j,viz[i][j][1]=INT_MAX;
			if(c=='J')
				x2=i,y2=j,viz[i][j][0]=INT_MAX;
			if(c=='X')
				mat[i][j]=-1,viz[i][j][1]=viz[i][j][0]=INT_MAX;
			if(c==' ')
				viz[i][j][0]=viz[i][j][1]=INT_MAX;
		}
	}
	lee(x1,y1,0);
	lee(x2,y2,1);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(viz[i][j][1]==viz[i][j][0])
				if(viz[i][j][1]<min)
					min=viz[i][j][1],x3=i,y3=j;
	out<<min<<" "<<x3<<" "<<y3;
	return 0;
}