Skip to content

Instantly share code, notes, and snippets.

@meru-akimbo
Created November 14, 2012 06:07
Show Gist options
  • Save meru-akimbo/4070595 to your computer and use it in GitHub Desktop.
Save meru-akimbo/4070595 to your computer and use it in GitHub Desktop.
幅優先探索の課題
#!/usr/bin/perl
use strict;
use warnings;
my $list = [[1],[0,2,3],[1,6],[1,4],[3,5],[4,6,7],[2,5,7],[5,6]];
my $start = 0;
my $end = 7;
&search($list,$start,$end);
sub search{
my $list = shift;
my $start = shift;
my $end = shift;
my $end_flag = 0;
my $queue = [[$start]];
while(scalar @$queue){
my $shift_queue = shift @$queue;
my $now_point = $shift_queue->[(scalar @$shift_queue) -1];
for(@{$list->[$now_point]}){
my @tmp = @$shift_queue;
push @tmp,$_;
push @$queue,\@tmp;
if($_ == $end){
$end_flag = 1;
my @result = @{ pop @$queue};
for(@result){
print "$_ → ";
}
print "終了";
last;
}
}
if($end_flag){last}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment