Cod sursa(job #84529)

Utilizator a7893Nae Mihai a7893 Data 15 septembrie 2007 21:41:48
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
#include<stdio.h>
#define N 102
#define M 102
FILE *f,*g;
const int dx[]={-1,-1,0,1,1,1,0,-1};
const int dy[]={0,1,1,1,0,-1,-1,-1};
int n,m,xr,yr,xj,yj,r[N][M],j[N][M];
char a[N][M];
void read()
{
	f=fopen("rj.in","r");
	int i,j;
	char ch;
	fscanf(f,"%d%d",&n,&m);
	fscanf(f,"%c",&ch);
	for(i=1;i<=n;i++)
	{
		fgets(a[i]+1,114,f);
		for(j=1;j<=m;j++)
		{
		//	scanf("%c",&ch);
		//	a[i][j]=ch;
			if(a[i][j]=='R')
			{
				xr=i;
				yr=j;
				a[i][j]=' ';
			}
			if(a[i][j]=='J')
			{
				xj=i;
				yj=j;
				a[i][j]=' ';
			}
		}
		//scanf("%c",&ch);
	}
	for(i=0;i<=n+1;i++)
		a[i][0]=a[i][m+1]='X';
	for(j=0;j<=m+1;j++)
		a[0][j]=a[0][n+1]='X';		
}
void bf(int x0,int y0,int d[N][M])
{
	int x1,y1,x2,y2,k=0,i1,i,j;
	struct vec
	{
		int x,y;
	}c[N*M];
	for(i=0;i<=n+1;i++)
		for(j=0;j<=m+1;j++)
			d[i][j]=-1;
	c[k].x=x0;
	c[k++].y=y0;
	d[x0][y0]=1;
	for(i1=0;i1<=k;i1++)
	{
		x1=c[i1].x;
		y1=c[i1].y;
		for(i=0;i<8;i++)
		{
			x2=x1+dx[i];
			y2=y1+dy[i];
			if(a[x2][y2]==' '&&d[x2][y2]==-1)
			{
				c[k].x=x2;
				c[k++].y=y2;
				d[x2][y2]=1+d[x1][y1];
			}
		}
	}
}
void afis(char a[N][M])
{
	int i,j;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
			fprintf(g,"%c",a[i][j]);
		fprintf(g,"\n");
	}
}
void afisare(int j[N][M])
{
	g=fopen("rj.out","w");
	int i,k,tmin,xf=xr,yf=yr;
	tmin=N*N+5;
	for(i=1;i<=n;i++)
		for(k=1;k<=m;k++)
			if(r[i][k]==j[i][k])
				if(r[i][k]<tmin&&r[i][k]!=-1)
				{
					tmin=r[i][k];
					xf=i;
					yf=k;
				}				
	fprintf(g,"%d %d %d\n",tmin,xf,yf);
}
int main()
{
	read();
	bf(xr,yr,r);
	bf(xj,yj,j);
	//afisare(r);
	//printf("\n");
	afisare(j);
	//afis(a);
	return 0;
}