Cod sursa(job #406725)

Utilizator mirunababliucMiruna Babliuc mirunababliuc Data 1 martie 2010 19:12:06
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <stdio.h>
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
typedef struct {int x, y;} PUNCT;
PUNCT c[10500];
void citire(int &n, int &m,int a[105][105],int b[105][105],int &xr,int &yr,int &xj,int &yj)
{
	int i,j;
	FILE *f=fopen("rj.in","r");
	char s;
	fscanf(f,"%d %d",&n,&m);
	fscanf(f,"%c",&s);
	for (i=1; i<=n; i++)
		{ for(j=1; j<=m; j++)
			  { fscanf(f,"%c",&s);
			    if(s==' ') a[i][j]=0;
			    else if(s=='R') { xr=i;
						    yr=j;
						    a[i][j]=-2;
						  }
				   else if(s=='J') { xj=i;
							   yj=j;
							   a[i][j]=-3;
							  }
					  else a[i][j]=-1;
			    b[i][j]=a[i][j];
			  }
		  fscanf(f,"%c",&s);
		}
	fclose(f);
}
int interior(int x, int y, int n, int m)
{
	if(x>0 && y>0 && x<=n && y<=m) return 1;
	return 0;
}
void drum(int x, int y, int a[105][105],int n,int m )
{
	int p,u,i,xv,yv;
	p=u=1;
	c[u].x=x;
	c[u].y=y;
	a[x][y]=1;
	while(p<=u)
		{ 
		  x=c[p].x;
	        y=c[p++].y;
		  for (i=0; i<=7; i++)
			  { xv=x+dx[i];
		          yv=y+dy[i];
			    if(interior(xv,yv,n,m) && a[xv][yv]==0)
					{ a[xv][yv]=a[x][y]+1;
				        c[++u].x=xv;
					  c[u].y=yv;
					}
			  }
		}
}
int main ()
{ 
	FILE *g=fopen("rj.out","w");
	int i,j,n,m,a[105][105],b[105][105],xr,yr,xj,yj,ok=0;
	citire(n,m,a,b,xr,yr,xj,yj);
	drum(xr,yr,a,n,m);                                                                                                ;
	drum(xj,yj,b,n,m);
	for(i=1; i<=m && !ok; i++)
		for(j=1; j<=n && !ok; j++)
			if(a[i][j]==b[i][j] && a[i][j]>0 && (xr!=i && yr!=j) && (xj!=i && yj!=j))  
					{ fprintf(g,"%d %d %d",a[i][j],i,j) ; ok=1; }
	fclose(g);
	return 0;
}