【发布时间】:2015-07-04 04:54:34
【问题描述】:
这是来自编码竞赛的问题
原始问题可以在这里找到http://www.olympiad.org.za/olympiad/wp-content/uploads/2014/03/2013-PO-Question-Paper.pdf 问题 5
穿过大厅的最短路径 [作者:Hulsbos High 的 Alan Smithee]
大厅里挤满了一排排椅子, 但每一排正好有两把椅子 失踪。每排椅子都有编号 从 1 到 100。编写一个程序来计算 从前面到前面的最短路径的长度 大厅的后面。 每把椅子宽 1 个单位,每排 1 个单位 深(从椅子的前面到椅子的前面 后面的椅子)。无法移动 对角线。你可以从前面的任何间隙开始 前排并在最后一排的任何间隙后面结束。 你总是从一个缺口的中间走过。 图示是穿过大厅的最短路径, 五排椅子。图中的大厅是 只有 10 把椅子宽,而不是 100 把。 输入中的第一个数字将包含 number n – 行数。接下来的 n 行 将有两个数字,用空格分隔, 指出差距在哪里。 例子 输入: 5 3 6 2 8 4 5 7 8 3 10
我认为我有一个我认为可以工作的有效算法,但我不确定如何在 Java 中实现它。
我想要做的是将每个选择分解成一个搜索树,例如,如果用户输入是:
行数:3
空间:4 7 2 9 8 11
制作 2 棵搜索树:
4 7
2 9 2 9
8 11 8 11 8 11 8 11
然后找到每个节点之间差异最小的路径 所以在这种情况下,最短路径将在第二棵树 7->9->8 中,总距离为 5 (||7-9|-8|) 所以我的问题是
考虑到问题,这个算法是否可以接受
我将如何在 java 中实现这个算法或另一个算法
@JuanLopes 以这个例子为例(0 代表一个空格)。
第 6 行:0 2 3 4 5 6 0 8 9
第 5 行:0 2 3 4 5 6 0 8 9
第 4 行:1 2 3 0 5 6 0 8 9
第 3 行:1 2 3 0 5 6 0 8 9
第 2 行:1 2 3 0 5 6 0 8 9
第 1 行:1 2 3 0 5 6 0 8 9
我从您的算法中了解到,它单独查看每一行。因此,通过第 1-4 行,每个空间到下一行之间的距离是相等的,但是当你到达第 5 行时,如果你沿着所有 4 都丢失的路径走,与沿着所有缺少 7s,您的解决方案是否考虑到这一点?
【问题讨论】:
-
实际上,您给出的示例的答案是 6,而不是 5。(7 到 9 = 2)+(9 到 8 = 1)+ 3 行 = 6。
标签: java algorithm recursion binary-search-tree graph-theory