Cod sursa(job #167669)

Utilizator luana_0105Fagarasan Luana luana_0105 Data 29 martie 2008 21:45:02
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.81 kb
#include<stdio.h>
int a[101][101],b[101][101];

char el;

unsigned char x[10001],y[10001];
//int huge d[10001];
FILE *f,*g;

int main()
{

//	puts("SDFGSDFGSF");
	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;
				b[i][j]=-1;
			}
			else
			{	if(el=='r'||el=='R')
				       {	a[i][j]=1;
						b[i][j]=1;
						rx=i;
						ry=j;
				       }

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

				}
			}

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

	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)
	x[0]=rx;y[0]=ry;
	a[rx][ry]=1;
	while (p<=u)        //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&&xv<=n&&yv<=m)    //daca nu e zid
			{
				u++;
				x[u]=xv;
				y[u]=yv;
				a[xv][yv]=a[x[p]][y[p]]+1;


			}

		}
		p++;
	}
	x[0]=jx;y[0]=jy;
	p=0;
	u=0;
	b[jx][jy]=1;
	gas=0;
	while (p<=u&&gas==0)
	{
		for(i=0;i<8;i++)
		{
			xv=x[p]+dx[i];
			yv=y[p]+dy[i];
			if(b[xv][yv]==0&&xv>0&&yv>0&&xv<=n&&yv<=m)
			{
				u++;
				x[u]=xv;
				y[u]=yv;
				b[xv][yv]=b[x[p]][y[p]]+1;
				if(b[xv][yv]==a[xv][yv])
				{	gas=1;
					fprintf(g,"%d %d %d ",a[xv][yv],xv,yv);
					fcloseall();
					return 0;
				}

			}
		}
		p++;
	}

	fcloseall();
	return 0;
}