【发布时间】:2019-05-14 22:29:41
【问题描述】:
我得到了一个类似于无向图的哲学家数据集。哲学家存储在哈希映射中,其中键是哲学家的名字,值是他的邻居列表。
用户给出 2 个哲学家的名字作为输入,我需要找到包含这 2 个哲学家的最短周期(如果存在的话)。
起初我认为这个问题与旅行商问题非常相似,但是在那个问题中,我们也有旅行距离,每个顶点只能访问一次,这似乎不是这种情况。这个问题的解决方案似乎与图形相关,但我不太确定使用哪种算法,甚至不确定哪个问题类似于它。
我想到的一个解决方案是在给定的图表中找到所有循环,将结果减少到仅包含用户给出的哲学家的循环,并从这些循环中只挑选最短的循环,因为我会根据如何对循环进行评分他们做出的许多“跳跃”基本上是一个简单的计数器。问题在于,考虑到数据集有多大以及可能形成多少个循环(很多),我担心它可能不是最佳解决方案。
输出需要采用以下格式:{u1, u2, u3, u4, u5, u1} 其中 u 是创建我正在寻找的循环的每个哲学家的名字。如果不存在这样的循环,那么我只需要打印一条适当的消息。
【问题讨论】:
-
假设你想要一个哲学家不相交的循环(没有重复)......我试图想象一个情况,在两者之间找到最短和接近最短的路径是不够的并将它们粘合在一起以形成循环。我无法想象一个。如果这确实足够,那么您可以使用 BFS 轻松找到最短路径。从图中删除它。然后再做一次 BFS 找出第二短的。
-
您应该编辑问题的标题以反映您想要一个涉及两个特定顶点的循环这一事实。我打算将您定向到computing the girth of a graph,但您的需求更精确。
-
好的,谢谢@Gene,是的,我会编辑标题谢谢安东尼!
-
@Gene:考虑一个图,其中有八个顶点标记为 A 到 H,边连接 A-B-C-D、B-E-F-D 和 A-G-H-C(总共九个边)。从 A 到 D 的最短路径是 A-B-C-D,但包含 A 和 D 的唯一循环是 A-B-E-F-D-C-H-G-A。
-
@FotisAronis:哦,对不起,我想我误解了你的评论。我很想看看你的完整答案。我有点怀疑您描述的方法实际上是否会在所有情况下给出正确的结果,但是如果没有具体的描述,我不能肯定地说。
标签: java algorithm graph hashmap shortest-path