Cod sursa(job #707239)

Utilizator i.anna_mIlusca Ana-Maria i.anna_m Data 5 martie 2012 20:52:53
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.37 kb
#include<stdio.h>
FILE *f,*g;
int n,m,a[102][102],myn=0,glob=1,t=1,w=1,p=0;
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 r,ju,meet,b[100200],c[100200],rez[100200];
void lee(int rx,int ry, int jx, int jy,int k,int u)
{
	register int i;
	if( ( (a[rx][ry]==myn || a[jx][jy]==myn) && myn!=0 ) || glob==-1)
	{
		glob=-1;
		return;
	}
	else
	{
		for(i=0;i<8;++i)
		{
			if(rx+dx[i]>0 && rx+dx[i]<=n && ry+dy[i]>0 && ry+dy[i]<=m && a[rx+dx[i]][ry+dy[i]]>=0)
			{
				if(a[rx+dx[i]][ry+dy[i]]==0)
				{
					a[rx+dx[i]][ry+dy[i]]=a[rx][ry]+1;
					b[t].x=rx+dx[i];
					b[t].y=ry+dy[i];
					++t;
				}
				else if(a[rx+dx[i]][ry+dy[i]]>0 && a[rx+dx[i]][ry+dy[i]]==a[rx][ry]+1)
				{
					if(myn==0)
					{	
						myn=a[rx][ry]+1;
						rez[p].x=rx+dx[i];
						rez[p].y=ry+dy[i];
					}
					if(myn>0 && myn==a[rx][ry]+1)
					{
						++p;
						rez[p].x=rx+dx[i];
						rez[p].y=ry+dy[i];
					}
				}
			}
			if(jx+dx[i]>0 && jx+dx[i]<=n && jy+dy[i]>0 && jy+dy[i]<=m && a[jx+dx[i]][jy+dy[i]]>=0)
			{
				if(a[jx+dx[i]][jy+dy[i]]==0)
				{
					a[jx+dx[i]][jy+dy[i]]=a[jx][jy]+1;
					c[w].x=jx+dx[i];
					c[w].y=jy+dy[i];
					++w;
				}
				else if(a[jx+dx[i]][jy+dy[i]]>0 && a[jx+dx[i]][jy+dy[i]]==a[jx][jy]+1)
				{
					if(myn==0)
					{	
						myn=a[jx][jy]+1;
						rez[p].x=jx+dx[i];
						rez[p].y=jy+dy[i];
					}
					if(myn>0 && myn==a[jx][jy]+1)
					{
						++p;
						rez[p].x=jx+dx[i];
						rez[p].y=jy+dy[i];
					}
				}
			}
		}
		lee(b[k].x,b[k].y,c[u].x,c[u].y,k+1,u+1);
	}
}
int main()
{
	f=fopen("rj.in","r");
	g=fopen("rj.out","w");
	register int i,j;
	char ac,hi[10];
	fscanf(f,"%d%d",&n,&m);
	fgets(hi,4,f);
	for(i=1;i<=n;++i)
	{
		for(j=1;j<=m;++j)
		{
			fscanf(f,"%c",&ac);
			if(ac=='\n')
				--j;
			if(ac=='R')
			{
				r.x=i;
				r.y=j;
				a[i][j]=1;
			}
			if(ac=='J')
			{
				ju.x=i;
				ju.y=j;
				a[i][j]=1;
			}
			if(ac=='X')
				a[i][j]=-1;
		}
	}
	b[0].x=r.x;
	b[0].y=r.y;
	c[0].x=ju.x;
	c[0].y=ju.y;
	lee(b[0].x,b[0].y,c[0].x,c[0].y,1,1);
	fprintf(g,"%d ",myn);
	if(p>0)
	{
		int my,mx;
		my=n+1;
		mx=m+1;
		for(i=0;i<=p;++i)
		{
			if(rez[i].x<my)
				my=rez[i].x;
			else if(rez[i].x==my && mx>rez[i].y)
				mx=rez[i].y;
		}
		fprintf(g,"%d %d",my,mx);
		fclose(f);
		fclose(g);
		return 0;
	}
}