Cod sursa(job #524367)

Utilizator Raz_Van_BarbascuBarbascu Razvan Raz_Van_Barbascu Data 20 ianuarie 2011 23:34:48
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include<fstream>
#include<iostream>
using namespace std;
int R[102][102],J[102][102],N,M,xR,yR,xJ,yJ;
int dx[8]={-1,-1,0,1,1,1,0,-1};
int dy[8]={0,1,1,1,0,-1,-1,-1};
int xX,yX,D=630;
void read()
{
	char c;
	ifstream f ("rj.in");
	f>>N>>M;f>>noskipws>>c;
	for(int i=1;i<=N;i++)
		for(int j=1;j<=M;j++)
		{
			f>>noskipws>>c;
			if(c=='X') {R[i][j]=-2;J[i][j]=-2;}
			if(c==' ') {R[i][j]=-1;J[i][j]=-1;}
			if(c=='R') {xR=i;yR=j;R[i][j]=-1;J[i][j]=-1;}
			if(c=='J'){xJ=i;yJ=j;R[i][j]=-1;J[i][j]=-1;}
			if(j==M)f>>noskipws>>c;
		}
			
	f.close();
}

void bordare()
{
	for (int i=0;i<=N+1;i++) 
	{
		R[i][0]=R[i][M+1]=-2;
		J[i][0]=J[i][M+1]=-2;
	}
	for (int i=0;i<=M+1;i++) 
	{
		R[0][i]=R[N+1][i]=-2;
		J[0][i]=J[N+1][i]=-2;
	}
}

void fillR(int x,int y)
{
	for(int dir=0;dir<8;dir++)
	if((R[x+dx[dir]][y+dy[dir]]>=0&&R[x+dx[dir]][y+dy[dir]]>R[x][y]+1)||(R[x+dx[dir]][y+dy[dir]]==-1))
	{
		R[x+dx[dir]][y+dy[dir]]=R[x][y]+1;
		fillR(x+dx[dir],y+dy[dir]);
	}
}

void fillJ(int x,int y)
{
	for(int dir=0;dir<8;dir++)
	if((J[x+dx[dir]][y+dy[dir]]>=0&&J[x+dx[dir]][y+dy[dir]]>J[x][y]+1)||(J[x+dx[dir]][y+dy[dir]]==-1))
	{
		J[x+dx[dir]][y+dy[dir]]=J[x][y]+1;
		fillJ(x+dx[dir],y+dy[dir]);
	}
}

void cauta()
{
	for(int i=1;i<=N;i++)
		for(int j=1;j<=M;j++)
		{
			if(R[i][j]==J[i][j]&&R[i][j]<D&&R[i][j]>0) {D=R[i][j];xX=i;yX=j;}
		}
	ofstream g ("rj.out");
	g<<D<<' '<<xX<<' '<<yX;
	g.close();
}

int main()
{
	read();
	bordare();
	R[xR][yR]=1;
	J[xJ][yJ]=1;
	fillR(xR,yR);
	fillJ(xJ,yJ);
	cauta();
	return 0;
}
/*

*/