Cod sursa(job #167668)

Utilizator luana_0105Fagarasan Luana luana_0105 Data 29 martie 2008 21:43:51
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.14 kb
#include<stdio.h>

int a[100][100];

char el;

int x[3000],y[3000],x1[3000],y1[3000];

FILE *f,*g;

int main()
{
	int d[1000],d1[1000];

	int n,m,i,j,jx,jy,rx,ry,min,p,u,gas=0,xv,yv;

	f=fopen("rj.in","r");
	g=fopen("rj.out","w");


	fscanf(f,"%d",&n);
	fscanf(f,"%d",&m);
	fscanf(f,"%c",&el);
	for(i=1;i<=n;i++)
	{	for(j=1;j<=m;j++)
		{
			fscanf(f,"%c",&el);
			if(el=='x'||el=='X')
			{	a[i][j]=-1;
			}
			else
			{	if(el=='r'||el=='R')
				       {	a[i][j]=1;
						rx=i;
						ry=j;
				       }

				else
				{	if(el=='j'||el=='J')
					{
						a[i][j]=-2;
						jx=i;
						jy=j;
					}
					else
						if(el==' ')
						{	a[i][j]=0;
						}

				}
			}

		}
		fscanf(f,"%c",&el); //ca sa treaca la linia urmatoare
	}

for (i=1;i<=n;i++)
 {
  for (j=1;j<=m;j++)
  printf("%3d ",a[i][j]);
  printf("\n");
  }

	int dx[]={-1,-1,0,1,1,1,0,-1};
	int dy[]={0,1,1,1,0,-1,-1,-1};
	p=0; //pozitia curenta
	u=0; //ultima pozitie (indici in vector)
	d[p]=1; // deplasarea (distanta)
	d1[p]=1;
	int u2=0;
	x[0]=rx;y[0]=ry;x1[0]=jx;y1[0]=jy;

	while (p<=u&&gas==0)        //cat timp mai am elem in coada si nu am gasit pe julieta
	{
		for(i=0;i<8;i++)
		{
			xv=x[p]+dx[i];
			yv=y[p]+dy[i];      // x vecin si y vecin
			if (a[xv][yv]==0&&xv>0&&yv>0)    //daca nu e zid
			{
				u++;
				x[u]=xv;
				y[u]=yv;
				d[u]=d[p]+1;         //cati pasi am pus
				a[xv][yv]=d[u];

			}

		}

		for(i=0;i<8;i++)
		{
			xv=x1[p]+dx[i];
			yv=y1[p]+dy[i];      // x vecin si y vecin
			if ((a[xv][yv]==0||d[u]==a[xv][yv])&&xv>0&&yv>0)    //daca nu e zid
			{
				u2++;
				x1[u2]=xv;
				y1[u2]=yv;
				d1[u2]=d1[p]+1;         //cati pasi am pus
				if(d1[u2-1]==a[xv][yv])
					a[xv][yv]=d1[u2-1];
				else
					a[xv][yv]=d1[u2];

			}
		}
		p++;
		if(u>u2)
			min=u2;
		else
			min=u;
		for(i=0;i<min;i++)
			for(j=0;j<min;j++)
				if(x[i]==x1[j]&&y[i]==y1[j])
				{
				   gas=1;
				   fprintf(g,"%d %d %d ",a[x[i]][y[i]],x[i],y[i]);}
	  }
printf("\n");
for (i=1;i<=n;i++)
 {
  for (j=1;j<=m;j++)
  printf("%3d ",a[i][j]);
  printf("\n");
  }


	fcloseall();
	return 0;
}