use diagnostics; use strict; use Vertex; use Edge; sub make_vertex($); sub make_edge($$$); if (1) {}; # Emacs Perl-mode does not like prototypes; indentation destroyed. my ( @data, $i, $comment, $nr_edges, $nr_verteces ); my ( $v1, $v2 ); my ( @verteces, %verteces, @edges, %edges ); $comment = '#.*$'; while (<>) { my ( $vertex_1, $vertex_2, $edge, $key); $i++; s/$comment//; next if /^\s*$/; /^\s*(\S+)\s+(\S+)/; if (!$1 || !$2) { print STDERR "Non-valid data on line $i.\n"; next; } ($v1, $v2) = ($1, $2); $vertex_1 = $verteces{$v1}; if (!$vertex_1) { $vertex_1 = make_vertex($v1); $verteces{$v1} = $vertex_1; push @verteces, $vertex_1; } $vertex_2 = $verteces{$v2}; if (!$vertex_2) { $vertex_2 = make_vertex($v2); $verteces{$v2} = $vertex_2; push @verteces, $vertex_2; } $key = $v1 . '_' . $v2; $edge = $edges{$key}; if (!$edge) { $edge = make_edge($vertex_1, $vertex_2, $key); $edges{$key} = $edge; push @edges, $edge; } $vertex_1 -> add_edge_reference($edge); $vertex_2 -> add_edge_reference($edge); } $verteces[0] -> print_vertex(2); #-------------------------------------- # Subroutines and functions. sub make_vertex ($) { my ( $label ) = @_; return Vertex->new('x' => int(rand(100)), 'y' => int(rand(100)), 'label' => $label); } # make_vertex sub make_edge ($$$) { my ( $vertex_1, $vertex_2, $label ) = @_; return Edge->new('vertex_1' => $vertex_1, 'vertex_2' => $vertex_2, 'label' => $label ); } # make_vertex