Cod sursa(job #519040)

Utilizator lily3Moldovan Liliana lily3 Data 3 ianuarie 2011 20:49:00
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<fstream>
using namespace std;

FILE *g=fopen("rj.out","w");
int i,j,n,m,rr[101][101],jj[101][101],tmin,p1,p2;
int xr,yr,xj,yj,dx[8]={-1,-1,0,1,1,1,0,-1},dy[8]={0,1,1,1,0,-1,-1,-1};
char x;
int verif(int x,int y,int a[101][101])
{
	return(x<=0||y<=0||x>n||y>m||a[x][y]==-1||a[x][y]==0);
}
void rez(int x,int y,int p[101][101])
{
	int i,xx,yy,st,dr,ok=1;
	int q[100001][2];
	q[0][0]=x;
	q[0][1]=y;
	st=dr=0;
	p[x][y]=1;
	while(st<=dr&&ok)
	{
		x=q[st][0];
		y=q[st][1];
		for(i=0;i<8;i++)
		{
			xx=x+dx[i];
			yy=y+dy[i];
			if(verif(xx,yy,p))
				continue;
			if(p[xx][yy]>p[x][y]+1)
			{
				p[xx][yy]=p[x][y]+1;
				q[++dr][0]=xx;
				q[dr][1]=yy;
			}
		}
		st++;
	}
}
int main()
{
	FILE *f=fopen("rj.in","r");
	
	fscanf(f,"%d%d",&n,&m);
	fscanf(f,"%c",&x);
	for(i=1;i<=n;i++)
	{
		
		for(j=1;j<=m;j++)
		{
			fscanf(f,"%c",&x);
			if(x=='R')
				xr=i,yr=j;
			if(x=='J')
				xj=i,yj=j;
			if(x=='X')
				rr[i][j]=jj[i][j]=-1;
			if(x==' ')
				rr[i][j]=jj[i][j]=1000000;
				
		}
	fscanf(f,"%c",&x);
	}
	rez(xr,yr,rr);
	rez(xj,yj,jj);
	tmin=1000000;
	p1=1;
	p2=1;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(rr[i][j]==jj[i][j]&&rr[i][j]<tmin&&rr[i][j]!=-1&&rr[i][j]!=0)
			{
				tmin=rr[i][j];
				p1=i;
				p2=j;
			}
			fprintf(g,"%d %d %d\n",tmin,p1,p2);
	
	return 0;
}