Cod sursa(job #81866)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 4 septembrie 2007 19:50:43
Problema Pachete Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<stdio.h>
#include<math.h>
#include<stdlib.h>

struct punct{int x,y,d;};



int compara(struct punct *x,struct punct *y)
{
	if(x->d>y->d) return 1;
	else if(x->d<y->d) return -1;
	return 0;
}




int main()
{
	int i,x,y,n,x0,y0,nr=0,ind=1,gasit=0;
    struct punct v[100],drum[100];
	FILE *f=fopen("pachete.in","r");
	


    fscanf(f,"%i",&n);
    fscanf(f,"%i",&x0);
	fscanf(f,"%i",&y0);

	for(i=0;i<n;i++)
	{
		fscanf(f,"%i %i",&x,&y);
		v[i].x=x;
		v[i].y=y;
		v[i].d=abs(x-x0)+abs(y-y0);
}


 qsort(v,n,sizeof(struct punct),compara);
 

 drum[nr].x=v[0].x;
 drum[nr].y=v[0].y;
 drum[nr].d=v[0].d;
 nr=1;

 while(ind<n)
 {

 gasit=0;

 for(i=0;i<nr;i++)
 {


	if(abs(v[ind].x-drum[i].x)+abs(v[ind].y-drum[i].y)+drum[i].d==v[ind].d)
	{
		drum[i].x=v[ind].x;
	    drum[i].y=v[ind].y;
		drum[i].d=v[ind].d;
		gasit=1;
		break;
	}


}

 
 if(gasit==0) {
	 
	 drum[nr].x=v[ind].x;
	 drum[nr].y=v[ind].y;
	 drum[nr].d=v[ind].d;
	 nr++;
 }

 ind++;

 }


fclose(f);
f=fopen("pachete.out","w");
fprintf(f,"%i",nr);
fclose(f);
return 0;

}