【问题标题】:Algorithm design. Optimal, most efficient solution算法设计。最佳、最有效的解决方案
【发布时间】:2014-06-16 10:31:30
【问题描述】:

我有一个小问题想要解决。我很想提出最佳解决方案,我认为递归可能是这里的最佳选择。如果您认为我的解决方案是理想的,或者您认为有更好的方法,请告诉我。

问题来了: 我有一个城市列表。我想要的算法是确定一个城市距华盛顿特区的度数。每个城市都有一个通过它的高速公路列表。如果一个城市与华盛顿特区共享任何高速公路,那么它与它的距离为 1 度。如果一个城市不与华盛顿特区共享高速公路,但与距华盛顿特区 1 度的城市共享高速公路,那么该城市与华盛顿特区的距离为 2 度。

我正在考虑创建一个高速公路列表,每条高速公路都应该有一个它所经过的所有城市的列表。然后我循环穿过所有穿过华盛顿特区的高速公路,对于每条高速公路,我查看它经过的所有城市,然后递归检查每个城市,看看最终一条高速公路会到达华盛顿特区,这样我就可以得到度数。

你会如何解决这个问题?

【问题讨论】:

  • BFS 怎么样?因此,从您探索每个邻居的原始城市开始,将度数加一。当您到达华盛顿特区时,返回学位值。
  • 如果有多个度数怎么办?

标签: algorithm recursion


【解决方案1】:

您需要构建一个图,其中节点是城市,并且当且仅当存在连接 A 和 B 的高速公路时,城市 A 和 B 之间存在无向边。那么度数是最短路径的长度(所有边的长度为 1)在各个城市之间。您可以通过广度优先搜索找到它。

如何枚举边缘?对于每条高速公路,只需使用两个嵌套循环来查找所有城市对。

【讨论】:

    【解决方案2】:

    这是经典的最短路径问题(wiki)。

    城市是顶点,它们之间的高速公路 - 边,度数 - 从城市到华盛顿特区的最短路径的长度。

    【讨论】:

    • 不完全。通往华盛顿的高速公路上的所有城市都有 1 级
    • @Gene,也许我在描述什么是边缘时不清楚:高速公路上的所有城市之间都有边缘。所以没有问题 - 最短路径将等于 1。
    猜你喜欢
    • 2016-11-14
    • 2022-01-07
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 2011-11-18
    相关资源
    最近更新 更多