Cod sursa(job #708330)

Utilizator i.anna_mIlusca Ana-Maria i.anna_m Data 6 martie 2012 18:46:15
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include<stdio.h>
FILE *f,*g;
int n,m,a[150][150],min=0, d=1;
int dx[]={1,1,0,-1,-1,-1,0,1},dy[]={0,-1,-1,-1,0,1,1,1};
typedef struct poz
{
	int x,y;
};
poz vec[100023],ju,ro;
void back(int r, int e, int h)
{
	register int i;
	for(i=0;i<8;i++)
	{
		if(r+dx[i]== ju.x && e+dy[i]==ju.y)
		{	
			if((a[r][e]+1)%2!=0)
			{
				min=a[r][e]+1;
				a[r+dx[i]][e+dy[i]]=a[r][e]+1;
				return;
			}
		}
		else if(r+dx[i]>0 && r+dx[i]<n+1 && e+dy[i]>0 && e+dy[i]<n+1 && a[r+dx[i]][e+dy[i]]==0)
		{
			vec[d].x=r+dx[i];
			vec[d].y=e+dy[i];
			a[vec[d].x][vec[d].y]=a[r][e]+1;
			d++;
		}
	}
	if(min!=0)
		return;
	else 
		back(vec[h+1].x,vec[h+1].y,h+1);
}
int main()
{
	f=fopen("rj.in","r");
	g=fopen("rj.out","w");
	register int i,j,k;
	fscanf(f,"%d%d",&n,&m);
	char ac;
	while(ac!='\n')
		fscanf(f,"%c",&ac);
	for(i=1;i<=n;++i)
		for(j=1;j<=m;++j)
		{
			fscanf(f,"%c",&ac);
			if(ac=='\n')
				--j;
			else if(ac=='J')
			{
				ju.x=i;
				ju.y=j;
				a[i][j]=-3;
			}
			else if(ac=='R')
			{
				ro.x=i;
				ro.y=j;
				a[i][j]=1;
			}
			else if(ac=='X')
				a[i][j]=-1;
		}
	vec[0].x=ro.x;
	vec[0].y=ro.y;
	back(ro.x,ro.y,0);
	fprintf(g,"%d ",min/2+1);
	i=ju.x;
	j=ju.y;
	while(a[i][j]>min/2+1)
	{
		for(k=0;k<8;++k)
			if(a[i+dx[k]][j+dy[k]]==a[i][j]-1)
			{
				i=i+dx[k];
				j=j+dy[k];
				if(a[i][j]==min/2+1)
					k=8;
			}
	}
	fprintf(g,"%d %d",i,j);
}