18 my $show = shift @ARGV;
19 my $output = shift @ARGV || "";
21 my $ui = AA::UI->new($output);
23 my $back = AA::Background->new('bg');
25 my $title = AA::Label->new('title');
27 'text' => "Goldberg's Algorithm",
34 for (my $i=0; $i<5; $i++) {
35 my $v = AA::NetV->new("v$i");
39 'label' => ($i == 0) ? "Z" : ($i == 4) ? "S" : $i,
40 'h' => ($i == 0) ? 5 : 0,
46 for (my $i=0; $i<4; $i++) {
47 my $e = AA::NetE->new("e$i", $v[$i], $v[$i+1]);
53 for (my $i=1; $i<@v; $i++) {
54 my $ii = $i; # need to keep a copy in the current closure
55 $v[$i]->Bind('xs', sub { $e[$ii-1]->Get('f') - (($ii == @v-1) ? 0 : $e[$ii]->Get('f')) });
57 $v[4]->{XS}->Set('color', [0,1,0]);
61 $e[$i]->Set('f', $e[$i]->Get('f') + $df);
67 my $h = $v[$i]->Get('h');
68 $v->SetTicker('h', $h, $h+1, 10);
73 AA::Anim->add_final(sub {
74 for (my $i=0; $i<@v; $i++) {
75 $v[$i]->Set('hint', $i == $h);
82 if (!$show || $show eq "1") {
85 sub { flow(0, 5); hint(1); },
87 sub { flow(1, 5); hint(2); },
89 sub { flow(2, 5); hint(3); },
91 sub { flow(3, 5); hint(-1); },
93 } elsif ($show eq "2") {
94 $title->Set('text', "Goldberg Meets Bottleneck");
95 for (my $i=0; $i<@v-1; $i++) {
96 $e[$i]->Set('c', 5-$i);
100 sub { flow(0, 5); hint(1); },
102 sub { flow(1, 4); hint(2); },
104 sub { flow(2, 3); hint(3); },
108 sub { flow(2, -1); hint(2); },
110 sub { flow(1, -2); hint(1); },
117 sub { flow(0, -1); hint(2); },
119 sub { flow(2, 1); hint(3); },
122 sub { flow(2, -1); hint(2); },
125 sub { flow(2, 1); hint(3); },
128 sub { flow(2, -1); hint(2); },
132 sub { flow(1, -1); hint(1); },
133 sub { flow(0, -1); hint(3); },
136 sub { flow(2, -1); hint(2); },
137 sub { flow(1, -1); hint(1); },
138 sub { flow(0, -1); hint(-1); },
140 } elsif ($show eq "3") {
141 $title->Set('text', "Goldberg with Max Height Rule");
142 for (my $i=0; $i<@v-1; $i++) {
143 $e[$i]->Set('c', 5-$i);
147 sub { flow(0, 5); hint(1); },
155 sub { flow(0, -1); hint(2); },
164 sub { flow(1, -1); hint(1); },
165 sub { flow(0, -1); hint(3); },
175 sub { flow(2, -1); hint(2); },
176 sub { flow(1, -1); hint(1); },
177 sub { flow(0, -1); hint(-1); },
180 die "What do you want?\n";
183 $ui->RunScenario($scenario);