出雲大社東京分祠は出雲大社の御祭神大国主神の御分霊を奉斎する都内でも最古の社であり、従って神前結婚式も都内各神社に先んじて明治31年より始めた古い歴史と伝統を有して居りまして当神殿にて挙式相成ることは新郎新婦の幾千代かけて壽ぐ一生一度の御慶事を一層 意義づけることゝ存じます。
#!/usr/bin/perl use strict; use warnings; my @mm = map {chomp; [split(//, $_)]} <>; # 地図を読んで配列にセット my ($y, $x); # スタート地点をセット for (my $ty = 0; $ty < @mm; $ty++) { for (my $tx = 0; $tx < @{$mm[$ty]}; $tx++) { ($y, $x) = ($ty, $tx) if $mm[$ty][$tx] eq 'S'; } } my $path; # 正解パス my @ft; # 足跡 my @nodes; # 探検隊(複数) push @nodes, {Y => $y, X => $x, PATH => [[$y, $x]]}; while (@nodes) { my $cur = shift @nodes; my ($y, $x) = ($cur->{Y}, $cur->{X}); if ($mm[$y][$x] eq "G") { $path = $cur->{PATH}; last; } foreach my $d ([0,1], [0,-1], [1,0], [-1,0]) { if ($mm[$y+$$d[0]][$x+$$d[1]] =~ /[ G]/ and not $ft[$y+$$d[0]][$x+$$d[1]]) { push @nodes, {Y => $y+$$d[0], X=> $x+$$d[1], PATH => [@{$cur->{PATH}}, [$y+$$d[0], $x+$$d[1]]]}; $ft[$y+$$d[0]][$x+$$d[1]] = 1; } } } foreach my $yx (@{$path}) { $mm[$yx->[0]][$yx->[1]] = '$' if $mm[$yx->[0]][$yx->[1]] eq " "; } print join("\n", map {join("", @{$_})} @mm), "\n";
% cat a.map ************************** *S* * * * * * * ************* * * * * ************ * * * * ************** *********** * * ** *********************** * * G * * * *********** * * * * ******* * * * * * ************************** % ./a.pl a.map ************************** *S* * $$$$ * *$* *$$* $************* * *$* $$* $$************ * *$$$$* $$$$$ * **************$*********** * $$$$$$$$$$$$$ * **$*********************** * $$$$$* $$$$$$$$$$$$$G * * * $$$$*********** * * * * ******* * * * * * **************************