Cod sursa(job #406060)

Utilizator mirunababliucMiruna Babliuc mirunababliuc Data 1 martie 2010 09:40:37
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.15 kb
#include <stdio.h>
#include <iostream.h>
int dx[9]={-1,-1,-1,0,1,1, 0, 1};
int dy[9]={-1, 0, 1,1,1,0,-1,-1};
typedef struct {int x, y;} PUNCT;
PUNCT c[10500];
void citire(int &n, int &m,int a[105][105],int &xr,int &yr,int &xj,int &yj)
{
	int i,j;
	FILE *f=fopen("rj.in","r");
	char s;
	fscanf(f,"%d %d",&n,&m);
	fscanf(f,"%c",&c);
	for (i=1; i<=n; i++)
		{ for(j=1; j<=m; j++)
			  { fscanf(f,"%c",&s);
				if(s==' ') a[i][j]=0;
		        else if(s=='R') { xr=i;
									    yr=j;
									    a[i][j]=-2;
										}
					 else if(s=='J') { xj=i;
											 yj=j;
				                             a[i][j]=-3;
											}
					      else a[i][j]=-1;
			  }
				
		  fscanf(f,"%c",&c);
		}
	fclose(f);
}
int interior(int x, int y, int n, int m)
{
	if(x>0 && y>0 && x<=n && y<=m) return 1;
	return 0;
}
void copiere(int a[][105],int b[][105],int n, int m)
{
	int i,j;
	for(i=1; i<=n; i++)
		for(j=1; j<=m; j++)
			b[i][j]=a[i][j];
}

void drum(int x, int y, int a[105][105], int v,int n,int m )
{
	int p,u,i,xv,yv,ok=0;
	p=u=1;
	c[u].x=x;
	c[u].y=y;
	a[x][y]=1;
	while(p<=u && !ok)
		{ x=c[p].x;
	      y=c[p++].y;
		  for(i=0; i<=7 ; i++)
			  { xv=x+dx[i];
		        yv=x+dy[i];
				if (a[xv][yv]==v && interior(xv, yv,n,m)) ok=1;
				else if(a[xv][yv]==0 && interior(xv,yv,n,m)) 
							{ c[++u].x=xv;
							  c[u].y=yv;
							  a[xv][yv]=a[x][y]+1;
							}
			  }
		}
}
int main ()
{ 
	FILE *g=fopen("rj.out","w");
	int i,j,n,m,a[105][105],b[105][105],v,xr,yr,xj,yj,ok=0;
	citire(n,m,a,xr,yr,xj,yj);
	copiere(a,b,n,m);
	v=-3;
	drum(xr,yr,a,v,n,m);
	v=-2                                                                                                  ;
	drum(xj,yj,b,v,n,m);
	for(i=1; i<=n; i++)
		{for (j=1; j<=m; j++)
			cout<<a[i][j]<<" ";
		cout<<"\n";}
		cout<<"\n";
	for(i=1; i<=n; i++)
		{for(j=1; j<=m; j++)
		cout<<b[i][j]<<" ";
		cout<<"\n";}
		cout<<xr<<" "<<yr;
	for(j=1; j<=m && !ok; j++)
		for(i=1; i<=n && !ok; i++)
			if(a[i][j]==b[i][j] && a[i][j]>0 && (xr!=i && yr!=j) && (xj!=i && yj!=j))  
					{a[i][j]--; fprintf(g,"%d %d %d",i,j,a[i][j]) ; ok=1; }
	fclose(g);
	return 0;
}