# Read a file with cities into a graph
use graph;
package graph;
%Cities; # Hash table mapping cities to nodes
%Nodes; # Mapping of Node indicies to cities
sub read_cities {
my $filename = shift;
open(CITIES,$filename);
while (<CITIES>) {
chop;
my @a = split(/, +/);
my $node1;
my $node2;
# Check to see if a given city is already a node
if (!exists $Cities{$a[0]}) {
$node1 = new_Node();
$Cities{$a[0]} = $node1;
my $node_num = Node_v_get($node1);
$Nodes{$node_num} = $a[0];
} else {
$node1 = $Cities{$a[0]};
}
if (!exists $Cities{$a[1]}) {
$node2 = new_Node();
$Cities{$a[1]} = $node2;
my $node_num = Node_v_get($node2);
$Nodes{$node_num} = $a[1];
} else {
$node2 = $Cities{$a[1]};
}
# Add edges
Node_addedge($node1,$node2,$a[2]);
Node_addedge($node2,$node1,$a[2]);
}
}
sub print_near {
my $city = shift;
if (exists $Cities{$city}) {
my $node = $Cities{$city};
print "Cities near $city : ";
my $adj = Node_adj_get($node);
while (defined($adj)) {
my $anode = Edge_node_get($adj);
my $v = Node_v_get($anode);
print $Nodes{$v},", ";
$adj = Edge_next_get($adj);
}
}
print "\n";
}
read_cities("cities");
print_near("Denver");
print_near("Las Vegas");
syntax highlighted by Code2HTML, v. 0.9.1