#=================== 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