#!/usr/bin/perl use Algorithm::FastPermute; # which is avaible in CPAN sites open IN, "<".$ARGV[0] or die "Cannot open $1"; while (){ $linea++; chomp; if ($linea ==1){ if (/MAX/ || /max/ || /Max/){ $tipo = 1; } }else{ @lin = split / / ; $num=0; for $i (@lin){ $num++; $costes[$linea-1][$num] = $i; } $N = $num; } } close IN; if ($N != $linea-1) { die "Not a square matrix"; } print "$N\n"; for $i (1..$N) { for $j (1..$N) { print "$costes[$i][$j] "; } print "\n"; } print "\n"; my @order = (1..$N); $ZMIN=1.0e14; permute { # print "@order\n"; $Z=0; for $i (1..$N) { $Z+=$costes[$i][$order[$i-1]]; } if ($Z<=$ZMIN){ $ZMIN=$Z; print "@order\t$Z\n"; } } @order; __END__