Cod sursa(job #1148735)

Utilizator Emanuel9Dumitru Emanuel Cristian Emanuel9 Data 21 martie 2014 03:17:43
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
//P3. RJ

#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;

#define nmax 50
#define mmax 50

const int di[]={-1,-1,-1,0,0,1,1,1};
const int dj[]={-1,0,1,1,-1,-1,0,1};

char M[nmax][mmax];
int R[nmax][mmax],J[nmax][mmax];
int x[nmax*mmax],y[nmax*mmax];
int Ri,Rj;
int Ji,Jj;
int n,m;


void ReadData(char M[nmax][mmax],int &n,int &m){
	fstream in("rj.in",ios::in);
	in>>n>>m;
	string line;
	int i=1,j;
	getline(in,line);
	while(i<=n){
		getline(in,line);
		for(int j=0;j<line.size();j++){
			M[i][j+1]=line[j];
			if(line[j]=='R'){
				M[i][j+1] = ' ';
				Ri=i;
				Rj=j+1;
			}else if(line[j]=='J'){
				M[i][j+1] = ' ';
				Ji=i;
				Jj=j+1;
			}
		}
		i++;
	}
	in.close();
}

void Find_Each_Other(int a[nmax][mmax],int xx,int yy){
	memset(x,0,sizeof(x));
	memset(y,0,sizeof(y));
	int e,u;
	e=u=0;
	x[e]=xx;
	y[e]=yy;
	a[x[e]][y[e]]=1;
	while(e<=u){
		int i=x[e],j=y[e++];
		for(int k=0;k<8;++k)
			if(M[i+di[k]][j+dj[k]] == ' ' && (a[i+di[k]][j+dj[k]]>a[i][j]+1 || a[i+di[k]][j+dj[k]]==0)){
				a[i+di[k]][j+dj[k]] = a[i][j]+1;
				x[++u] = i+di[k];
				y[u] = j+dj[k];
			}
	}
}

void MP(){
	fstream out("rj.out",ios::out);
	int min=9999999;
	int mini,minj;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=m;++j)
			if(R[i][j] == J[i][j])
				if(min > R[i][j] && R[i][j]!=0){
					min = R[i][j];
					mini = i;
					minj = j;
				}
	out<<min<<mini<<minj;
	out.close();
}
int _tmain(int argc, _TCHAR* argv[])
{
	ReadData(M,n,m);
	Find_Each_Other(R,Ri,Rj);
	Find_Each_Other(J,Ji,Jj);
	MP();
	return 0;
}