Cod sursa(job #749397)

Utilizator GrozaCristianGroza Marius-Cristian GrozaCristian Data 16 mai 2012 21:29:30
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
#include<stdio.h>

typedef struct {
int x,y,val;
}punct;
FILE *f,*g;
	punct R,J,c[100],poz,sol[100];
	int n,m,i,j,a[101][101],nr;
	char linie[110];

	void lee()
	{
		int dx[]={-1,-1,0,1,1,1,0,-1};
		int dy[]={0,1,1,1,0,-1,-1,-1};
		int start=0,finish=2;
		c[1]=R;
		c[2]=J;
		while(start<=finish)
		{
			start++;
			poz=c[start];
			
			for(i=0;i<8;i++)
			{
				if(a[poz.x+dx[i]][poz.y+dy[i]]==a[poz.x][poz.y]+1)
					{
						nr++;
						sol[nr].x=poz.x+dx[i];
						sol[nr].y=poz.y+dy[i];
						sol[nr].val=a[poz.x][poz.y];
					}
				if(a[poz.x+dx[i]][poz.y+dy[i]]==1)
				{
					

					a[poz.x+dx[i]][poz.y+dy[i]]=a[poz.x][poz.y]+1;
					finish++;
					c[finish].x=poz.x+dx[i];
					c[finish].y=poz.y+dy[i];
				}
			}
		

		}



	}



int main()
{
	
	f=fopen("rj.in","rt");
	g=fopen("rj.out","wt");
	
	fscanf(f,"%d",&n);
	fscanf(f,"%d",&m);
	fgets(linie,200,f);
	fflush(stdin);
	for(i=1;i<=n;i++)
	{	fgets(linie,200,f);

		for(j=0;j<m;j++)	
			if(linie[j]=='R')
				{
					R.x=i;
					R.y=j+1;
					a[i][j+1]=2;
				}
			else
				if(linie[j]=='J')
				{
					J.x=i;
					J.y=j+1;
					a[i][j+1]=2;
				}
				else
					if(linie[j]==' ')
						a[i][j+1]=1;
					
	}
	lee();

	for(i=1;i<nr;i++)
		for(j=nr;j>i;j--)
			if(sol[i].val>sol[j].val)
			{
				poz=sol[i];
				sol[i]=sol[j];
				sol[j]=poz;
			}
			else
				if(sol[i].val=sol[j].val)
				{
					if(sol[i].x>sol[j].x)
					{
						poz=sol[i];
						sol[i]=sol[j];
						sol[j]=poz;
					}
					else
						if(sol[i].x==sol[j].x)
							if(sol[i].y>sol[j].y)
								{
									poz=sol[i];
									sol[i]=sol[j];
									sol[j]=poz;
								}
				}


	
	fprintf(g,"%d %d %d",sol[1].val,sol[1].x,sol[1].y);
return 0;}