Cod sursa(job #1835533)

Utilizator serban24Popovici Serban-Florin serban24 Data 27 decembrie 2016 00:27:04
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <iostream>
#include <cstring>
#include <cctype>
#include <fstream>
#include <queue>
#include <utility>
#include <climits>

using namespace std;

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

int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
char h[105][105];
int vizitat[105][105];
void lee(int x, int y, int a[105][105],int en, int em){
	int i,j,i_urmator,j_urmator;

	for(i=1;i<=en;i++)
		for(j=1;j<=em;j++)
			vizitat[i][j]=0;

	queue<pair<int,int>> q;
	q.push(make_pair(x,y));
	vizitat[x][y]=1;
	a[x][y]=0;

	while(q.size()!=0){
		i=q.front().first;
		j=q.front().second;
		q.pop();
		for(int dir=0;dir<4;dir++){
			i_urmator=i+dx[dir];
			j_urmator=j+dy[dir];
			if(i_urmator>0 && i_urmator<en+1 && j_urmator>0 && j_urmator<em+1 && vizitat[i_urmator][j_urmator]!=1 && h[i_urmator][j_urmator]!='X'){
					vizitat[i_urmator][j_urmator]=1;
					a[i_urmator][j_urmator]=a[i][j]+1;
					q.push(make_pair(i_urmator,j_urmator));
			}
		}
	}
}

int romeo[105][105],julieta[105][105];
int main(){
    int i,j,n,m,x1,y1,x2,y2,linie=INT_MAX,coloana=INT_MAX,intalnire=INT_MAX;

    fin>>n>>m;

	fin.get();
    for(i=1;i<=n;i++)
		fin.getline(h[i]+1,105);

	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			if(h[i][j]=='R'){
				x1=i;
				y1=j;
			}
			if(h[i][j]=='J'){
				x2=i;
				y2=j;
			}
		}
	}

	lee(x1,y1,romeo,n,m);
	lee(x2,y2,julieta,n,m);

	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(romeo[i][j]==julieta[i][j] && h[i][j]==' '){
				if(intalnire>romeo[i][j]){
					intalnire=romeo[i][j];
					linie=i;
					coloana=j;
				}
			}

	fout<<intalnire<<" "<<linie<<" "<<coloana;

    return 0;
}