Cod sursa(job #125674)

Utilizator hadesgamesTache Alexandru hadesgames Data 20 ianuarie 2008 15:54:09
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <stdio.h>
#define N 105
struct poz{
	int x,y;
};
int a[N][N],b[N][N],c[N][N],n,m;
const int dl[]={-1,0,1,0},dc[]={0,1,0,-1};
void lee(int x, int y,int c[N][N])
{
	int p,u,i,j;
	poz d[100000];
	p=1;
	u=1;
	d[1].x=x;
	d[1].y=y;
	c[x][y]=1;
	for (i=p;p<=u;i++)
	{
		for (j=0;j<4;j++)
			if (!c[d[i].x+dl[j]][d[i].y+dc[j]] && a[d[i].x+dl[j]][d[i].y+dc[j]])
			{
				u++;
				d[u].x=d[i].x+dl[j];
				d[u].y=d[i].y+dc[j];
				c[d[i].x+dl[j]][d[i].y+dc[j]]=c[d[i].x][d[i].y]+1;
			}
		p++;
	}
		
}
inline int minim(int a,int b){
	return a>b?a:b;
}
void afis()
{
	FILE *out;
	int i,j,min,x,y;
	out=fopen("rj.out","w");
	min=2000000000;
	for (i=1;i<=n;i++)
		for (j=1;j<=m;j++)
			if (a[i][j]&&minim(b[i][j],c[i][j])<min&&b[i][j]&&c[i][j])
			{
				min=minim(b[i][j],c[i][j]);
				x=i;
				y=j;
			}
	fprintf(out,"%d %d %d\n",min-1,x,y);
	fclose(out);
	
}
void scrie(int a[N][N]){
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j)
			printf("%3d",a[i][j]);
		printf("\n");
	}
	printf("\n");
}

int main()
{
	FILE *in;
	char cc;
	int i,j,x1,x2,y1,y2;
	char s[200];
	in=fopen("rj.in","r");
	fscanf(in,"%d%d\n",&n,&m);
	for (i=1;i<=n;i++)
	{
		fscanf(in,"%c",&cc);
		fgets(s,200,in);
		for (j=0;j<m;j++)
		{
			if (s[j]!='X')
				a[i][j+1]=1;
			if (s[j]=='X')
				a[i][j+1]=0;
			if (s[j]=='J')
			{
				x1=i;
				y1=j+1;
			}
			if (s[j]=='R')
			{
				x2=i;
				y2=j+1;
			}
			//printf("%d ",a[i][j+1]);
			
		}
		//printf("\n");
	}
	lee(x1,y1,b);
	lee(x2,y2,c);
	//scrie(b);
	//scrie(c);
	afis();
	fclose(in);
	return 0;
	
}