枚举图中单个源的所有路径

时间:2014-01-26 21:55:55

标签: graph path depth-first-search breadth-first-search

我想知道你是否知道一种算法来枚举来自单个源的图中所有可能的简单路径,而不重复任何顶点。请记住,图表将非常小(16个节点)并且相对稀疏(每个节点2-5个边缘)。

让我的问题清楚:

顶点:A,B,C

A connects to B, C
B connects to A, C
C connects to A, B

路径(来自A):

A,B
A,C
A,B,C
A,C,B

顶点:A,B,C,D

A connects to B, C
B connects to A, C, D
C connects to A, B, D

路径(来自A):

A,B
A,C
A,B,C
A,B,D
A,C,B
A,C,D
A,B,C,D
A,C,B,D

肯定不是BFS或DFS,尽管其可能的变体之一可能有效。我在SO中看到的大多数类似问题都是处理节点图,所以我的问题略有不同。

Find all possible paths from one vertex in a directed cyclic graph in Erlang也是相关的,但答案与Erlang有关,或者不清楚究竟需要做什么。正如我所看到的,该算法可以替代地被描述为从单个源找到所有可能的简单路径以获得预定数量的跳数。然后,对于跳数(1到N),我们可以找到所有解决方案。

我使用Java,但即使是伪代码对我来说也足够了。

1 个答案:

答案 0 :(得分:2)

在Python风格中,它是一个BFS,具有不同的访问跟踪:

MultiplePath(path, from):
  from.visited = True
  path.append(from)
  print(path)

  for vertex in neighbors(from):
    if (not vertex.visited):
      MultiplePath(path, vertex)

  from.visited = False
Return