#=================== Configuration =================== # $max_node_number - approximate number of nodes to generate #our $max_node_number = 200000; our $max_node_number = 2000; # $max_level - number of node levels, root node has level 0 our $max_level = 7; # $max_level - number of child nodes for each node our $max_number = 7; # $attributeNumber - number of attributes added to each node our $attributeNumber = 2; # $linkNumber - number of links added to each node our $linkNumber = 0; #=================== Script ========================== use strict; our $counter = 0; our $rest = 1; sub attributes($) { my $level = shift; for(my $i = 1; $i <= $attributeNumber; $i++) { print " " x ($level * 4); print "\n"; } } sub links($) { if(! $linkNumber) { return; } my $level = shift; for(my $i = 1; $i <= $attributeNumber; $i++) { my $target = int(rand($max_node_number)) + 1; if($target == $counter) { $target--; } print " " x ($level * 4); print "\n"; } } sub nodes($) { if($counter + $rest > $max_node_number) { return; } my $level = shift; if ($level > $max_level) { return; } $rest += $max_number; for(my $i = 1; $i <= $max_number; $i++) { $counter++; $rest--; my $folded; if($counter + $rest > $max_node_number || $level == $max_level) { $folded = ''; } else{ $folded='FOLDED = "true"'; } print " " x ($level * 4); print "\n"; attributes($level + 1); links($level + 1); nodes($level + 1); print " " x ($level * 4); print "\n"; } } print < ENDOFMAP nodes(1); print < ENDOFMAP2