Cod sursa(job #784675)

Utilizator DemnokStefan Demnok Data 6 septembrie 2012 16:59:21
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.95 kb
#include <string.h>
#include <fstream.h>
#include<iomanip.h>
ifstream f("rj.in");
ofstream g("rj.out");
const int dx[]={0,-1,-1,0,1,1,1,0,-1};
const int dy[]={0,0,1,1,1,0,-1,-1,-1};
struct poz{int x,y;}c[10001];
int a[100][100],b[100][100],n,m,xj,xr,xf,yj,yr,yf,min;
char ch;
void read();
void bordare();
void solve();
void lee1(int x,int y);
void lee2(int x,int y);
int main ()
{
	read();
	bordare();
	solve();
	f.close();
	g.close();
	return 0;
}
void read ()
{
	f>>n>>m;
	f.get();
	for (int i=1;i<=n;i++)
	{
		for (int j=1;j<=m;j++)
		{
			f.get(ch);
			if (ch==' ') a[i][j]=b[i][j]=0;
			if (ch=='X') a[i][j]=b[i][j]=-1;
			if (ch=='J') xj=i,yj=j,a[i][j]=b[i][j]=0;
			if (ch=='R') xr=i,yr=j,a[i][j]=b[i][j]=0;
		}
		f.get();
	}
}
void bordare ()
{
	for (int i=0;i<=n+1;i++)
		a[i][0]=a[i][m+1]=-1;
	for (int i=0;i<=m+1;i++) 
		a[0][i]=a[n+1][i]=-1;
	for (int i=0;i<=n+1;i++)
		b[i][0]=b[i][m+1]=-1;
	for (int i=0;i<=m+1;i++) 
		b[0][i]=b[n+1][i]=-1;
}
void solve ()
{
	
	lee1(xr,yr);
	lee2(xj,yj);
	min=n*m;
	xf=-1,yf=-1;
	for (int i=1;i<=n;i++)
		for (int j=1;j<=m;j++)
			if (a[i][j]==b[i][j] && a[i][j]!=-1 && a[i][j]!=0)
				if(a[i][j]<min) min=a[i][j],xf=i,yf=j;
	if (xf!=-1 && yf!=-1) g<<a[xf][yf]<<' '<<xf<<' '<<yf;
	else g<<"Nu se pot intalni";
}
void lee1(int x,int y)
{
	int p,u,x1,y1,x2,y2,i;
	p=1,u=1;
	c[p].x=x;
	c[p].y=y;
	a[x][y]=1;
	while (p<=u)
	{
		x1=c[p].x;
		y1=c[p].y;
		for (i=1;i<=8;i++)
		{
			x2=x1+dx[i];
			y2=y1+dy[i];
			if (a[x2][y2]==0)
			{
				a[x2][y2]=a[x1][y1]+1;
				u++;
				c[u].x=x2;
				c[u].y=y2;
			}
		}
		p++;
	}
}
void lee2(int x,int y)
{
	int p,u,x1,y1,x2,y2,i;
	p=1,u=1;
	c[p].x=x;
	c[p].y=y;
	b[x][y]=1;
	while (p<=u)
	{
		x1=c[p].x;
		y1=c[p].y;
		for (i=1;i<=8;i++)
		{
			x2=x1+dx[i];
			y2=y1+dy[i];
			if (b[x2][y2]==0)
			{
				b[x2][y2]=b[x1][y1]+1;
				u++;
				c[u].x=x2;
				c[u].y=y2;
			}
		}
		p++;
	}
}