#!/usr/bin/perl -w

$ZONES = 10 ;
$N = 100 ;

for $i (1..$N){
        $t[$i]= 1+$i%$ZONES;
        $x[$i]= -100 + rand(200);
        $y[$i]= -100 + rand(200);
}

for $i (1..$N){
        for $j (1..$i){
                $d[$i][$j] = sqrt( ($x[$i]-$x[$j])**2 + ($y[$i]-$y[$j])**2 );
                $d[$j][$i]=$d[$i][$j];
        }
}

$min = 9e99;
for (;;) {
        $lasti = 1 + int (rand($N));
        $t[0]=$t[$lasti];
	$t[$lasti] = 1+ int (rand($ZONES));
        $iter++;
        @sum= ();
    $func = 0;
        for $i (1..$ZONES){
                for $j (1..$N){
                        next if ($t[$j]!=$i);
                        for $k (1..$j-1){
                                if ($t[$k]==$i){
                                        $sum[$i] += $d[$j][$k];
                                }
                        }
                }
                if (defined $sum[$i]){
	    $func += $sum[$i];
                } 
        }
        if ($func < $min){
                print "$iter: $func\n";
                for $i (1..$ZONES){
                        if (defined $sum[$i]){
                                print "$i $sum[$i] ->";
                        }else{ print "$i ->"; }
                        for $j (1..$N){
                                if ($t[$j]==$i) { print " $j"; }
                        }
                        print "\n";
                }
                $min = $func;
        }else{
		$t[$lasti]=$t[0];
	}
}


__END__

