【问题标题】:Print routes from tickets从门票打印路线
【发布时间】:2016-09-27 17:35:52
【问题描述】:

今天遇到一个我无法解决的问题。

一位经常旅行的人收集了他所有的旅行票。 一张票只有 2 个属性,Start Journey Location name 和 Destination Name。从德里到纽约的例子。 在年底,旅行者将所有的票放在一起,并尝试绘制他全年的旅程图。以可读的格式打印他可能的旅行路线。他不记得他的起始位置。他可以多次访问一个位置,也可以多次往返于一个地方。

最初我认为它可以通过制作一个图(票证-A 到 B 表示有向边 A->B)并使用从入度为 0(??)的节点的简单深度优先遍历来简单地解决。但后来我意识到这不是获得解决方案的正确方法,因为它可以打印随机未连接的路线。
请提出正确的方法。

【问题讨论】:

  • 搜索“欧拉路径”
  • 如果我们假设所有旅行都有一张相关的机票(即他没有飞到芝加哥,然后开车到纽约并飞到波士顿),那么如果他从 A 飞到 B,下一个旅程必须从 B 开始。保持该限制将阻止您创建随机的、未连接的路径。
  • @JimMischel 假设我们目前在城市 B 并且有很多票涉及 B 作为目的地(a1-b,a2-b,a3-b...)以及来源(b- c1,b-c2,b-a1,...) 现在如何判断,在城市 B 上,先走哪条路径将导致一条连接的路线(连接意味着终点和起点应该始终保持不变)。
  • @DeepankarSingh:我只是告诉你如何避免随机的、未连接的路由。对我来说,剩下的工作听起来像是一个动态编程问题。

标签: algorithm data-structures graph-algorithm


【解决方案1】:

首先你应该检查你的图是否有欧拉轨迹或欧拉循环。

一个有向图有一个欧拉循环当且仅当每个顶点都有 度数和外度数相等,并且其所有顶点均非零 degree 属于单个强连通分量。等效地, 一个有向图有一个欧拉环当且仅当它可以 分解为边不相交的有向环及其所有顶点 具有非零度的属于单个强连通分量。

有向图有一个欧拉轨迹当且仅当至多一个顶点 has (out-degree) - (in-degree) = 1,最多一个顶点有 (in-degree) − (out-degree) = 1,每个其他顶点的入度相等,并且 出度数,且其所有度数非零的顶点都属于 底层无向图的单连通分量。

如果你的图有一个欧拉循环,你可以从任意节点开始你的 DFS,你可以确保你的路径是正确的。

如果你的图有欧拉轨迹,首先找到带有(out-degree) − (in-degree) = 1 的节点并将其命名为source,然后找到带有(in-degree) − (out-degree) = 1 的节点并将其命名为sink。你应该从source开始你的DFS,并尽可能避免去sink。这意味着只要在转到节点sink 和其他某个节点之间有一个选项,您就应该转到另一个节点并仅在您没有其他选项时使用sink 节点(不完全正确,但使其更简单)。这样您就可以确保最终获得正确的线索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多