Java 在O(n)时间内找到正确的路径

Java 在O(n)时间内找到正确的路径,java,python,c,algorithm,time-complexity,Java,Python,C,Algorithm,Time Complexity,假设有一条从源到目标的路径,但它是混乱的 比如说 A B E F B C A B C D -> D E D E C D E F B C 假设没有循环,给定混乱的路径,我们可以在O(n)时间内返回原始路径。路径的起点是成对出现的第一个元素,而不是第二个元素。构建一个从开始到路径中下一个节点的映射,并在其中迭代 这三个步骤中的每一个都是O(n),给出了一个O(n)的整体解决方案 下面是Python 2.7中的一些示例代码: import sys

假设有一条从源到目标的路径,但它是混乱的

比如说

A B      E F
B C      A B
C D  ->  D E
D E      C D
E F      B C

假设没有循环,给定混乱的路径,我们可以在O(n)时间内返回原始路径。

路径的起点是成对出现的第一个元素,而不是第二个元素。构建一个从开始到路径中下一个节点的映射,并在其中迭代

这三个步骤中的每一个都是O(n),给出了一个O(n)的整体解决方案

下面是Python 2.7中的一些示例代码:

import sys

follow = dict(line.strip().split() for line in sys.stdin)
x = set(follow).difference(follow.itervalues()).pop()
while x:
    print x
    x = follow.get(x)
运行示例:

$ echo -e "E F\nA B\nD E\nC D\nB C" | python follow.py 
A
B
C
D
E
F

我认为标准的广度优先搜索就足以解决这个问题:)我想是的。但我必须找到根源。但这就是要求。对吗?列出的所有边都属于该路径吗?或者它们可以包含不相关的边?如果不是,一个简单的技巧可以克服这一点,正如Anonymous所指出的。