
#include <stdio.h>
#include <stdlib.h>

#define Step_nr 1000
#define Sizes 1.0
#define frac 0.001
#define Start_nr 100
#define pi 3.1415

FILE *fp;

float NX[1000+1];
float NY[1000+1];
unsigned int State[5000+1];
float Rate;
int nv, rn;



void results()
{
 fp=fopen("rats.dat","a");
	 fprintf(fp,"%d   %f\n", rn, Rate);
 fclose(fp);
 return;
}

void init()
{
 int ik;
 for(ik=1; ik<rn/2; ik++) {State[ik]=1; nv++;}
 for(ik=rn/2; ik<rn+1; ik++) State[ik]=0;
 return;
}

void rebuild1(int f)
{
  int t;
  float sr;
  for(t=1; t<f; t++)
	 {
		sr=((NX[f]-NX[t])*(NX[f]-NX[t])+(NY[f]-NY[t])*(NY[f]-NY[t]))*pi;
		if (sr<frac*Sizes*Sizes) return;
	 }
  for(t=f+1; t<rn+1; t++)
	 {
		sr=((NX[f]-NX[t])*(NX[f]-NX[t])+(NY[f]-NY[t])*(NY[f]-NY[t]))*pi;
		if (sr<frac*Sizes*Sizes) return;
	 }
  State[f]=0;
  nv=nv-1;
  return;
}


void rebuild2(int f)
{
  int t;
  float sr;
  for(t=1; t<f; t++)
	 {
		sr=((NX[f]-NX[t])*(NX[f]-NX[t])+(NY[f]-NY[t])*(NY[f]-NY[t]))*pi;
		if ((sr<frac*Sizes*Sizes) && (State[t]==1)) { nv=nv+1; State[f]=1; return;}
	 }
  for(t=f+1; t<rn+1; t++)
	 {
		sr=((NX[f]-NX[t])*(NX[f]-NX[t])+(NY[f]-NY[t])*(NY[f]-NY[t]))*pi;
		if ((sr<frac*Sizes*Sizes) && (State[t]==1)) {nv=nv+1; State[f]=1; return;}
	 }
  return;
}

void main (void)
 {
	 int i,k;
	 fp=fopen("rats.c","w");
	 fclose(fp);
	 for(rn=100; rn<1000+1; rn=rn+100)
	 {
	 nv=0;
	 printf("%d\n",nv);
	 // getchar();
	 Rate=0;
	 init();
    printf("%d\n",nv);
	 // getchar();
	 for(i=1; i<Step_nr+1; i++)
	 {
	  printf("%d   ",i);
	  if (rand()<RAND_MAX/100)  {if (State[1]==0) {State[1]=1; nv++;}}
	  for(k=1; k<rn+1; k++)
			{
			 NX[k]=(float)(rand())/(float)(RAND_MAX)*Sizes;
			 NY[k]=(float)(rand())/(float)(RAND_MAX)*Sizes;
			 }
		for(k=1; k<rn+1; k++)
			 {
			  if (State[k]==1) rebuild1(k);
			  else rebuild2(k);
			 }
	  if (i>Start_nr-1) Rate=(float)(Rate*(i-Start_nr)+nv)/(i+1-Start_nr);
	  printf("%d\n",nv);
	 }
	results();
  }
 }

