幅優先探索をやってみたよ

これは書き直さなくても理解できたんだけど、もののついでで書いてみました。スマートじゃないけど。
キューの代わりに配列を使いました。enqueueはshift、dequeueはpopで代用するだけなので簡単です。

#!perl
use strict;

# ハッシュでグラフを(ry
my %adjacent = (
  'A' => [qw(B C)],
  'B' => [qw(A C D)],
  'C' => [qw(A B E)],
  'D' => [qw(B E F)],
  'E' => [qw(C D G)],
  'F' => [qw(D)],
  'G' => [qw(E)],
  );

sub queue_search {
  my ($start, $goal) = @_;
  my @queue;

  push @queue, $start;
  while (my $path = shift @queue) {
    my $apex = $path->[0];
    if ( $apex eq $goal) {
      # ゴールに到着
      @$path = reverse @$path;
      print "found: @$path\n";
    } else {
      for my $n ( @{ $adjacent{$apex}} ) {
        # 経路を探索に含まない
        next if grep { $n eq $_ } @$path;
        # キューに追加
        push @queue, [$n, @$path];
      }
    }
  }
}