Cod sursa(job #283141)

Utilizator irene_mFMI Irina Iancu irene_m Data 18 martie 2009 19:52:35
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <fstream.h>
char h[105][105];
int a[105][105],n,m,xr,yr,xj,yj,b[105][105],x[1000],y[1000],dx[9]={0,0,1,0,-1,1,1,-1,-1},dy[9]={0,1,0,-1,0,1,-1,-1,1};

void cit()
{
	int i,j;
	ifstream fin("rj.in");
	fin>>n>>m; fin.get();
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			h[i][j]=fin.get();
			if(h[i][j]=='R')
			{
				xr=i; yr=j;
			}
			if(h[i][j]=='J')
			{
				xj=i; yj=j;
			}
		}
		fin.get();
	}
	fin.close();
}

void leer()
{
	int l,xi,yi,d,st=1,dr=1;
	x[1]=xr; y[1]=yr;
	b[xr][yr]=1;
	while(st<=dr)
	{
		d=b[x[st]][y[st]]+1;
		for(l=1;l<=8;l++)
		{
			xi=x[st]+dx[l]; yi=y[st]+dy[l];
			if(xi<=n && xi>=1 && yi<=m && yi>=1)
				if((b[xi][yi]==0 || b[xi][yi]>d) && h[xi][yi]!='X')
				{
					dr++;
					x[dr]=xi; y[dr]=yi;
					b[xi][yi]=d;
				}
		}
		st++;
	}
}

void leej()
{
	int l,xi,yi,d,st=1,dr=1;
	x[1]=xj; y[1]=yj;
	a[xj][yj]=1;
	while(st<=dr)
	{
		d=a[x[st]][y[st]]+1;
		for(l=1;l<=8;l++)
		{
			xi=x[st]+dx[l]; yi=y[st]+dy[l];
			if(xi<=n && xi>=1 && yi<=m && yi>=1)
				if((a[xi][yi]==0 || a[xi][yi]>d) && h[xi][yi]!='X')
				{
					dr++;
					x[dr]=xi; y[dr]=yi;
					a[xi][yi]=d;
				}
		}
		st++;
	}
}

void afis(int x,int y,int tmin)
{
	ofstream fout("rj.out");
	fout<<tmin<<" "<<x<<" "<<y;
	fout.close();
}

void minim()
{
	int i,j,min=10000,p,q;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(a[i][j]!=0 && a[i][j]==b[i][j] && a[i][j]<min)
			{
				p=i; q=j;
				min=a[i][j];
			}
	afis(p,q,min);
}

int main()
{
	cit();
	leer();
	leej();
	minim();
	return 0;
}