Cod sursa(job #1201373)

Utilizator kappykkDragos kappykk Data 25 iunie 2014 00:00:01
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <iostream>
#include <cstdio>
#include <queue>
#define VM 102
#define x first
#define y second

using namespace std;

int rm[VM][VM], jm[VM][VM];

int n, m, poz, x1, y1, x2, y2;
int TimpMinim = 10000000, Linie, Coloana;

int dx[]={-1,-1,-1,0,0,1,1,1};
int dy[]={-1,0,1,1,-1,-1,0,1};

bool EInMatrice(int x, int y)
{
	return (x >= 1 && x <= n && y >= 1 && y <= m);
}

void Citire(){
	freopen("rj.in","rt",stdin);
	freopen("rj.out","wt",stdout);
	cin>>n;
	cin>>m;
	for(int i = 1 ; i <= n ; ++i)
		for(int j = 1 ; j <= m ; ++j)
		{
			cin>>poz;
			if(poz=='X')
                rm[i][j]=jm[i][j]=-1;
			if(poz=='R')
                x1=i; y1=j;
			if(poz=='J')
                x2=i; y2=j;
		}

}

void ParcugereMatrice(int x, int y, int matrice[VM][VM]){
    queue<pair<int,int> > c;
	rm[x][y]=1;
	while(!c.empty()){
		pair<int,int> auxiliara = c.front();
		c.pop();
		for(int i = 0 ; i < 8 ; ++i){
			int dl = auxiliara.x + dx[i];
			int dc = auxiliara.y + dy[i];
			if(EInMatrice(dl , dc) && matrice[dl][dc] == 0){
				matrice[dl][dc] = matrice[auxiliara.x][auxiliara.y]+1;
				c.push(make_pair(dl,dc));
			}
		}
	}
}

int i,j;

bool IntalnireTMIN(){
    if(rm[i][j] == jm[i][j] && rm[i][j] > 0 && jm[i][j] < TimpMinim)
        return true;
    return false;
}

void DrumParcurs(){
	for(i = 1 ; i <= n ; ++i)
		for(j = 1 ; j <= m ; ++j)
			if(IntalnireTMIN){
				TimpMinim = rm[i][j];
				Linie = i;
				Coloana = j;
			}
 }

int main()
{
    Citire();
    ParcugereMatrice(x1 , y1 , rm);
    ParcugereMatrice(x2 , y2 , jm);
    DrumParcurs();
    cout<<TimpMinim<<" "<<Linie<<" "<<Coloana;
    return 0;
}