in reply to representing a tree
use warnings; use strict; my (%edges, %processed); while (<DATA>) { if (/(\d+),(\d+)/) { $edges{$1} = [] unless (exists $edges{$1}); push(@{$edges{$1}}, $2); } }; close DATA; for (sort keys %edges) { print_tree($_) unless exists $processed{$_}; } sub print_tree { my ($node, $pp) = @_; $pp = '' unless defined $pp; print "$pp$node\n"; $processed{$node} = 1; return unless exists $edges{$node}; for (@{$edges{$node}}) { print "$pp$_ - cycle detected\n" if exists $processed{ +$_}; print_tree($_, $pp.' ') unless exists $processed{$_}; } } __DATA__ 1,3 1,4 1,5 3,8 3,9 4,11 4,18 8,14 8,15 5,17 5,16 17,21
|
|---|