路径和:两种方法
作者:Moritz Lenz
https://projecteuler.net/problem=81
在下面的 5 x 5 矩阵中,从左上角到右下角的最短路径和为 2427,该路径仅通过向右和向下移动,并以粗体显示。
⎛131 673 234 103 18⎞ ⎜201 96 342 965 150⎟ ⎜630 803 746 422 111⎟ ⎜537 699 497 121 956⎟ ⎝805 732 524 37 331⎠
在 matrix.txt 文件中找到从左上角到右下角的最短路径和,该文件是一个 31K 的文本文件,包含一个 80 x 80 的矩阵,路径仅通过向右和向下移动。
use v6; my @m; my $matrix-file = $*SPEC.catdir($*PROGRAM-NAME.IO.dirname, 'matrix.txt'); my $f = open $matrix-file or die "Can't open file for reading: $!"; for $f.lines -> $line { @m.push: $line.comb(/\d+/).Array.item; } $f.close; my ($max-x, $max-y) = +@m[0], +@m; @m[0][$_] += @m[0][$_-1] for 1..$max-x-1; @m[$_][0] += @m[$_-1][0] for 1..$max-y-1; for 1..$max-y-1 -> $y { for 1..$max-x-1 -> $x { @m[$y][$x] += @m[$y-1][$x] min @m[$y][$x-1]; } } say @m[*-1][*-1];