矩阵路径深度搜索

情景

coding.net为了活跃气氛,春节期间出了一个鸡年猴语言的娱乐coding,2月2号的谜题是矩阵路径 [path_in_matrix]算法。

#鸡年猴语言#
矩阵路径是这样一个点序列:从给定矩阵中任一数字标记的点出发,每一步可以向左、右、上、下四个方向之一移动一格到达下一个点,依次类推而得到的点序列,一条矩阵路径最少包含两个点,同一个点可以多次出现在一条矩阵路径上。现用点的标记数字组成的序列来表示这样的矩阵路径,例如 1 5 6 7 是矩阵中的一条路径,而 8 5 1 4 就不是。判定输入的序列是否表示了一个合规的矩阵路径,若是,输出 1,若不是,输出 0。input 会给出多组序列,每组中间用 0 做分隔符。

给定的矩阵如下:
1 2 3 4
5 6 7 8
1 4 2 6
3 5 1 7

参与方式:在冒泡话题 #鸡年猴语言# 下首行添加题目注释,像这样:
#鸡年猴语言#
//[path_in_matrix]

勤劳的自动检测机器人 @monkey_worker 就会运行你的程序并且将输出值和是否成功评论在你的冒泡下方。
了解更多游戏规则及猴语言语法
Tips:如何从 input 读取数值呢?参考这些代码

实现

算法其实就是矩阵的深度搜索,但是同一节点可以多次出现在同一条路径中。

PHP实现:

= count($matrix) || $cols < 0 || $cols >= count($matrix[0]) || $start < 0) {
        return false;
    }
    
    if ($start == count($str)) {
        return true;
    }
    if ($matrix[$rows][$cols] === $str[$start]) {
        return dfs($matrix, $rows, $cols + 1, $start + 1, $str) ||
            dfs($matrix, $rows, $cols - 1, $start + 1, $str) ||
            dfs($matrix, $rows + 1, $cols, $start + 1, $str) ||
            dfs($matrix, $rows - 1, $cols, $start + 1, $str);
    }
    return false;
}

$matrix = [
    [1,2,3,4],
    [5,6,7,8],
    [1,4,2,6],
    [3,5,1,7]
];
$str = [1,5,6,4];
$str = [3,7,8,6,7,1];
$str = [2,1,5,8,6];
var_dump(hasPath($matrix, $str));

上面三条路打印结果分别为:true true false

你可能感兴趣的:(php,coding.net,矩阵,矩阵计算,路径查找)