Cod sursa(job #645405)

Utilizator marinutzacatana marina marinutza Data 9 decembrie 2011 15:52:13
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include<fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int ro[110][110],ju[110][110],tmin,i,j,n,m,xr,yr,xj,yj,xt,yt;
int dx[]={-1,-1,-1,0,1,1,1,0},dy[]={-1,0,1,1,1,0,-1,-1};
char s[110];
struct asde
{
	int x;
	int y;
};
asde z,c[10010];
void citeste()
{
	f>>n>>m;
	f.get();
	for(i=1;i<=n;i++)
	{
		f.getline(s,110);
		for(j=1;j<=m;j++)
		{
			if(s[j-1]=='X')
			{
				ro[i][j]=ju[i][j]=-1;
			}
			if(s[j-1]=='R')
			{
				xr=i;
				yr=j;
			}
			if(s[j-1]=='J')
			{
				xj=i;
				yj=j;
			}
		}
	}
}
void bold(int a[110][110])
{
	int i;
	for(i=0;i<m+2;i++)
	{
		a[0][i]=a[n+1][i]=-1;
	}
	for(i=0;i<n+2;i++)
	{
		a[i][0]=a[i][m+1]=-1;
	}
}
void lee(int a[110][110],int x1,int y1)
{
	a[x1][y1]=1;
	c[1].x=x1;
	c[1].y=y1;
	int p,u;
	p=u=1;
	a[x1][y1]=1;
	while(p<=u)
	{
		z=c[p];
		for(i=0;i<8;i++)
		{
			x1=z.x+dx[i];
			y1=z.y+dy[i];
			if(a[x1][y1]==0)
			{
				a[x1][y1]=a[z.x][z.y]+1;
				c[++u].x=x1;
				c[u].y=y1;
			}
		}
		p++;
	}
}
int main()
{
	citeste();
	bold(ro);
	bold(ju);
	lee(ro,xr,yr);
	lee(ju,xj,yj);
	tmin=10000000;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			if((ro[i][j]==ju[i][j])&&(ro[i][j]>0))
			{
				if(tmin>ro[i][j])
				{
					tmin=ro[i][j];
					xt=i;
					yt=j;
				}
			}
		}
	}
	g<<tmin<<" "<<xt<<" "<<yt;
	return 0;
}