Cod sursa(job #405957)

Utilizator VladberilaVladutz Vladberila Data 28 februarie 2010 23:15:52
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.77 kb
#include <fstream.h>
#include <iostream.h>
#include <string.h>
#include <iomanip.h>
ifstream f("rj.in");
ofstream g("rj.out");
int a[102][102],i,j,m,n,di[]={-1,-1,0,1,1,1,0,-1},dj[]={0,1,1,1,0,-1,-1,-1},xr,yr,xj,yj,inc,sf,k,b[102][102],min=-1,xmin,ymin;
struct Element
{
	int l,c,d;
} C[400],x,y;
char t;
int main()
{
	f>>n>>m;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			b[i][j]=a[i][j]=-2;
	i=j=1;
	f.get(t);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			f.get(t);
			if(t=='X')
					b[i][j]=a[i][j]=-1;
			else
				if(t=='R')
						{
							xr=i;
							yr=j;
				        }
				else
					if(t=='J')
							{
								xj=i;
								yj=j;
					        }
		}
		f.get(t);
	}
	for(i=0;i<=n+1;i++)
		b[i][0]=b[i][m+1]=a[i][0]=a[i][m+1]=-1;
	for(i=0;i<=m+1;i++)
		b[0][i]=b[n+1][i]=a[0][i]=a[n+1][i]=-1;
	x.l=xr;
	x.c=yr;
	x.d=0;
	a[xr][yr]=0;
	C[inc]=x;
	while(inc<=sf)
	{
		x=C[inc++];
		for(k=0;k<8;k++)
		{
			y.l=x.l+di[k];
			y.c=x.c+dj[k];
			if(a[y.l][y.c]==-2)
			{
				y.d=x.d+1;
				a[y.l][y.c]=y.d;
				C[++sf]=y;
			}
		}
	}
	inc=sf=0;
	x.l=xj;
	x.c=yj;
	x.d=0;
	b[xj][yj]=0;
	C[inc]=x;
	while(inc<=sf)
	{
		x=C[inc++];
		for(k=0;k<8;k++)
		{
			y.l=x.l+di[k];
			y.c=x.c+dj[k];
			if(b[y.l][y.c]==-2)
			{
				y.d=x.d+1;
				b[y.l][y.c]=y.d;
				C[++sf]=y;
			}
		}
	}
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(a[i][j]!=-1 && a[i][j]!=-2 && a[i][j]==b[i][j])
                if(a[i][j]<min || min==-1)
				{
			       min=a[i][j];
				   xmin=i;
				   ymin=j;
				}
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
			cout<<a[i][j]<<' ';
		cout<<'\n';
	}
	cout<<'\n';
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
			cout<<b[i][j]<<' ';
		cout<<'\n';
	}
	g<<min+1<<' '<<xmin<<' '<<ymin;
	return 0;
}