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

Graph 枚举图中单个源的所有路径,graph,path,depth-first-search,breadth-first-search,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、C、D A connects to B, C B connects to A, C, D C connects to A, B, D 路径(来自A): 它肯定不是B

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

我的问题是:

顶点:A、B、C

A connects to B, C
B connects to A, C
C connects to A, B
路径(来自A):

顶点:A、B、C、D

A connects to B, C
B connects to A, C, D
C connects to A, B, D
路径(来自A):

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

这也是相关的,但答案与Erlang太相关,或者不清楚到底需要做什么。如我所见,该算法也可以描述为从单个源中找到指定跳数的所有可能的简单路径。然后对于跳数(1到N),我们可以找到所有的解


我使用Java,但即使是一个伪代码也足以帮助我

在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
A,B
A,C
A,B,C
A,B,D
A,C,B
A,C,D
A,B,C,D
A,C,B,D
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