Cod sursa(job #407781)

Utilizator eu93Marian S eu93 Data 2 martie 2010 17:16:59
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <stdio.h>
typedef struct {
	int x,y;
} poz;
void citire (int a[101][101], int b[101][101], int &xr,int &yr, int &xj, int &yj, int &n, int &m) {
	int i,j;
	char c;
	FILE *f=fopen ("rj.in","r");
	fscanf (f,"%d%d",&n,&m); fscanf (f,"%c",&c);
	for (i=1;i<=n;i++) {
		for (j=1;j<=m;j++) {
			fscanf (f,"%c",&c);
			if (c=='X') a[i][j]=b[i][j]=-1; 
			else if (c=='R') { xr=i; yr=j; a[i][j]=b[i][j]=1;}
			else if (c=='J') { xj=i; yj=j; b[i][j]=b[i][j]=1;}
			else a[i][j]=b[i][j]=0;
		}
		fscanf (f,"%c",&c);
	} 
	fclose(f);
}
int verifica (int xv, int yv, int a[101][101], int n, int m) {
	if (xv<=n && xv>=1 && yv<=m && yv>=1 && a[xv][yv]==0) return 1;
	return 0;
}
void Lee (int a[101][101], int xr, int yr, int n, int m) {
	int dx[]={-1,-1,-1,0,1,1,1,0}, dy[]={1,0,-1,-1,-1,0,1,1},p,u,x,y,i,xv,yv;
	poz c[10010];
	p=u=1;
	c[u].x=xr; 
	c[u].y=yr;
	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 (verifica (xv,yv,a,n,m)==1) {
				a[xv][yv]=a[x][y]+1;
				c[++u].x=xv;
				c[u].y=yv;
			}
		}
	}
}
int main () 
{ int a[101][101], b[101][101], xr,yr, xj,yj,i,j,n,m,xp,yp,min;
FILE *g=fopen ("rj.out","w");
citire (a,b,xr,yr,xj,yj,n,m);
Lee (a,xr,yr,n,m);
Lee (b,xj,yj,n,m);
min=n*n+1;
for (i=1;i<=n;i++) 
	for (j=1;j<=m;j++) 
		if (a[i][j]==b[i][j] && a[i][j]<min && a[i][j]>1) {min=a[i][j]; xp=i; yp=j;}
fprintf (g,"%d %d %d",min,xp,yp);
fclose (g);
return 0;
}