Cod sursa(job #558608)

Utilizator cameliamartMart Camelia cameliamart Data 17 martie 2011 13:02:25
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include<fstream.h>
#include<string.h>
int a[150][150],b[150][150];
typedef struct{int x,y;}COADA;
COADA c[22500],d[22500];
int dx[]={0,0,1,1,1,0,-1,-1,-1};
int dy[]={0,1,1,0,-1,-1,-1,0,1};
int main()
{
	ifstream f("rj.in");
	ofstream g("rj.out");
	int n,m,i,j,ok,p,u,X1,Y1,X2,Y2,x,y,xn,yn,k;
	char s[150];
	f>>n>>m;
	i=0;
	while(!f.eof())
	{
		f.getline(s,150);
		j=1;
		for(k=0;k<strlen(s);k++)
		{
			if(s[k]==' '){a[i][j]=0;b[i][j]=0;}
				else if(s[k]=='R')
					{X1=i; Y1=j; a[i][j]=-1;b[i][j]=-1;}
				else if(s[k]=='J')
					{X2=i; Y2=j; a[i][j]=-2;b[i][j]=-2;}
				else {a[i][j]=-3;b[i][j]=-3;}
			j++;
		}
		i++;
	}
	p=u=1;ok=0;
	c[u].x=X1;
	c[u].y=Y1;
	a[X1][Y1]=1;
	while(p<=u&&ok==0)
	{
		x=c[p].x;
		y=c[p].y;
		for(i=1;i<=8;i++)
		{
			xn=x+dx[i];
			yn=y+dy[i];
			if(x>=1&&x<=n&&y>=1&&y<=m&&a[xn][yn]==0)
			{
				a[xn][yn]=a[x][y]+1;
				c[++u].x=xn;
				c[u].y=yn;
				if(xn==X2&&yn==Y2)ok=1;
			}
		}
		p++;
	}
	p=u=1;ok=0;
	d[u].x=X2;
	d[u].y=Y2;
	b[X2][Y2]=1;
	while(p<=u&&ok==0)
	{
		x=d[p].x;
		y=d[p].y;
		for(i=1;i<=8;i++)
		{
			xn=x+dx[i];
			yn=y+dy[i];
			if(x>=1&&x<=n&&y>=1&&y<=m&&b[xn][yn]==0)
			{
				b[xn][yn]=b[x][y]+1;
				d[++u].x=xn;
				d[u].y=yn;
				if(xn==X1&&yn==Y1)ok=1;
			}
		}
		p++;
	}
	ok=0;
	for(i=1;i<=n&&ok==0;i++)
		for(j=1;j<=m;j++)
			if(a[i][j]==b[i][j]&&a[i][j]>0)
				{g<<a[i][j]<<" "<<i<<" "<<j;ok=1;break;}
	f.close();
	g.close();
	return 0;
}