Cod sursa(job #185525)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 25 aprilie 2008 16:31:46
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <stdio.h>
#define Nmax 101
int a[Nmax][Nmax];
int n,m;
int rx,ry,jx,jy;
const int lin[]={0,1,0,-1,-1,1,-1,1};
const int col[]={1,0,-1,0,-1,1,1,-1};
struct pnct{int a,b;};
pnct v[Nmax*4];
void read()
{
	char ch;
	freopen("rj.in", "r",stdin);
	freopen("rj.out", "w",stdout);
	scanf("%d%d\n",&n,&m);
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=m;++j)
		{
			scanf("%c", &ch);
			a[i][j]=Nmax;
			if(ch=='X')
				a[i][j]=-1;
			if(ch=='R')
			{
				rx=i;
				ry=j;
			}
			if(ch=='J')
			{
				jx=i;
				jy=j;
			}
		}
		scanf("%c", &ch);
	}
}
void lee(int x,int y)
{
	for(int t=0;t<7;t++)
		if((a[x+lin[t]][y+col[t]]>a[x][y]+1))
		{
			a[x+lin[t]][y+col[t]]=a[x][y]+1;
			v[++v[0].a].a=x+lin[t];
			v[v[0].a].b=y+col[t];
		}
}
void solve()
{
	a[rx][ry]=0;
	v[++v[0].a].a=rx;
	v[v[0].a].b=ry;
	for(int i=1;i<=v[0].a;i++)
		lee(v[i].a,v[i].b);
	int x=jx;
	int y=jy;
	v[0].a=0;
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=m;++j)
			printf("%d ",a[i][j]);
		printf("\n");
	}
	printf("%d %d\n",x,y);
	while(x!=rx && y!=ry)
	{
		for(int t=0;t<7;t++)
		if((a[x+lin[t]][y+col[t]]+1==a[x][y]))
		{
			x=x+lin[t];
			y=y+col[t];
			v[++v[0].a].a=x;
			v[v[0].a].b=y;
			break;
		}
		printf("%d %d\n",x,y);
	}
	printf("%d %d %d",(v[0].a+2)/2,v[ (v[0].a+1)/2 ].a,v[ (v[0].a+1)/2 ].b);
}
int main()
{
	read();
	solve();
	return 0;
}