【问题标题】:Longest path in a two-dimensional array of letters二维字母数组中的最长路径
【发布时间】:2020-03-19 01:51:06
【问题描述】:

我已经尝试解决这个问题大约 2 小时。我没有能力解决。有谁知道如何解决它?我尝试使用Python v. 3+

任何帮助将不胜感激:

给定一个二维字母数组,找出可以通过在字母表中相邻字母之间移动来创建的最长路径 - 例如,如果你在 D 上,你可能会移动到 E 或 C。你可以向上、向下、向左或向右移动一行或一列,但不能沿对角线或超过一个空格。您可以从任何方格开始,并且您只能使用给定的行/列对一次。

返回代表最长路径的行/列对的有序列表。如果两条路径之间存在平局,则返回以最低行索引开始的路径,如果这也是平局,则使用具有最低行和列索引的路径。 (如果仍然平局,返回任一路径都是可以的。)

示例输入

A B H F
C C D G
A B D F

示例输出

ABCBA

说明 该数组将始终包含至少一个值。 A 和 Z 不被视为“相邻”字母。 所有行将包含相同数量的字母。

【问题讨论】:

  • 请发表你最好的攻击。这是一个简单的图遍历——一旦你将它识别为一个图。你被困在哪里了?
  • 不是简单的图遍历;这是一个 NP-hard 问题。某种图遍历算法可以找到两个节点之间的最大距离,但这与寻找最长路径的问题不同。

标签: algorithm dynamic-programming graph-algorithm depth-first-search breadth-first-search


【解决方案1】:

这个问题可以建模为图中longest path problem 的一个实例。

构造一个图,其中每个字符都是图中的一个节点,并且当且仅当它们的字母在字母表中相隔 1 时,相邻字符的节点才有边。问题要求该图中最长的非自相交路径。

在一般情况下,最长路径问题是 NP-hard。但这是问题的restricted case,因为该图是网格的子图。尽管如此,它仍然是NP难的。这样做的原因是任何最长路径算法都可以用来解决Hamiltonian path problem,它询问是否存在访问图中每个顶点的路径。对于class of partial grid graphs,哈密顿路径问题是 NP 完全的。所以你要做的最好的就是某种backtracking search

【讨论】:

    猜你喜欢
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多