如何解决计算可能的最长连续遍历
背景
卡车车队调度员正试图确定在大雨淹没某些高速公路后哪些路线仍可通行。在行驶过程中,卡车必须在 26
个标记为 A
到 Z
的航路点之间遵循线性、有序的路径;换句话说,它们必须以标准或反向字母顺序遍历航路点。
调度员可以使用的唯一数据是行程日志,其中包含最近成功行程的记录。日志以字符串列表表示,其中每个字符串(对应一个条目)有两个字符分别对应于行程起点和目的地航点。
如果日志包含两点之间成功旅行的记录,则可以假设这些点之间的完整路径是可访问的。请注意,日志条目意味着遍历的两个方向都是有效的。例如,输入 RP 意味着卡车可以沿 R --> Q --> P
和 P --> Q --> R
移动。请注意,行程 A --> B
和 C -> D
一起并不意味着 B -> C
可用。条目可以有两次相同的字符,例如 C -> C
,但这表示没有路径。
给定一个日志条目数组,任务是编写一个函数来返回可能的最长连续遍历的长度;换句话说,计算已知安全的最大连续边数。 (用更正式的术语来说,计算这个图上最大树的直径。)
我试图返回可能的最长连续遍历的长度;换句话说,计算已知安全的最大连续边数。
def maximumTraversal(log):
length = []
for i in log:
length.append(abs(ord(i[0]) - ord(i[1])))
return max(length)
日志条目暗示遍历的两个方向都是有效的。例如,条目 RP
表示卡车可以沿 R --> Q --> P
和 P --> Q --> R
行驶。
我能够找到两个方向的遍历/长度。
log = ["BG","CA","FI","OK"]
maximumTraversal(log)
返回
5
logbook = ["BG","OK"]
的预期输出应该是 8
因为我们可以从 A
到 C
和从 B
到 G
,所以我们可以从 A
到 G
.因为我们可以从 F
到达 I
并从 I
访问 G
,因此我们可以遍历 A --> I
。这对应于 8
的遍历长度,因为 8
边连接这些 9
航路点。 O
到 K
是长度 4
遍历。这两条路径是不相交的,因此不再能找到连续的路径,答案是8
。
我无法找到上述条件的可能连续遍历?我该怎么做?
解决方法
您可以25 位存储您需要的信息,每条边一个。第一位代表AB,第二位代表BC,第三位代表CD,依此类推
A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
迭代每个日志条目并将相应的位设置为 1。这将自然地处理重叠的日志条目而不会出现问题。
以下是日志 ["BG","CA","FI","OK"]
的每个步骤的样子:
[]
A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
["BG"]
A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z
0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
["BG","CA"]
A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z
1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
["BG","FI"]
A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z
1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
["BG","OK"]
A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z
1 1 1 1 1 1 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
尘埃落定后,您可以通过查找相邻1
s的最长运行来找到最长的连续遍历。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。