Cod sursa(job #406015)

Utilizator crenguBacaoanu Crenguta crengu Data 1 martie 2010 08:32:02
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include<iostream.h>
#include<fstream.h>
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
typedef struct { int x,y;}PCT;
PCT c[1000];

void citire(int & n, int & m,int  a[][101], int b[][101])
{
	FILE *f=fopen("rj.in","r");
	int i,j;
	char c;
	fscanf(f,"%d%d",&n,&m);
	for(i=1;i<=n;i++)
	{ fscanf(f,"%c",&c);
		for(j=1;j<=m;j++)
			{
				fscanf(f,"%c", &c);
				if(c=='J')a[i][j]=-3;
				else if(c=='X')a[i][j]=-1;
				else if(c=='R')a[i][j]=-2;
				else if(c==' ')a[i][j]=0;
				b[i][j]=a[i][j];
		}
	   
    }
	fclose(f);
}

int interior(int x, int y, int n, int m)
{
	if(x>=1&&x<=n&&y>=1&&y<=m)return 1;
	return 0;
}
void drum(int x, int y, int n, int m, int a[][101])
{
	int p,u,i,xv,yv;
	p=u=1;
	c[u].x=x;
	c[u].y=y;
	a[x][y]=0;
	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(interior(xv,yv,n,m)&&a[xv][yv]==0)
		{
			a[xv][yv]=a[x][y]+1;
			c[++u].x=xv;
			c[u].y=yv;
		}
	}
	}
}

int main()
{
	int n,m,a[101][101],b[101][101],i,j,min,s,t,okk;

	FILE *g=fopen("rj.out","w");
	citire(n,m,a,b);
	

	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(a[i][j]==-2){drum(i,j,n,m,a);break;}
			

	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(b[i][j]==-3){drum(i,j,n,m,b);break;}
	okk=0;
	min=10000;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(a[i][j]==b[i][j]&&a[i][j]>0)
			if(a[i][j]+1<=min){min=a[i][j]+1; s=i; t=j;okk=1;}
	if(okk==0)
		for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(a[i][j]+1==b[i][j]&&a[i][j]>0||a[i][j]-1==b[i][j]&&a[i][j]-1>0)
			if(a[i][j]+1<=min){min=a[i][j]+1; s=i; t=j;okk=1;}
	fprintf(g,"%d %d %d",min,s,t);
		
	
	fclose(g);
	return 0;
}