Algorithm 在具有多维前置数组的图中查找两个节点之间的所有最短路径
因此,我一直在尝试寻找在未加权图中两个特定节点之间找到所有最短路径的方法,并且我编写了代码,直到我建立了一个“前置”数组,它跟踪我用来到达给定节点的节点。此数组是多维数组,因此,例如,如果从a到D的最短路径可以是a>B>D或a>C>D,则前置数组将如下所示(其中第一行是索引,下面的行是多维数组): 但现在我不知道如何在这个前置数组中找到每个排列,以获得每个可能的最短路径组合,然后打印出来,例如,我想打印出来:Algorithm 在具有多维前置数组的图中查找两个节点之间的所有最短路径,algorithm,graph,graph-algorithm,breadth-first-search,graph-traversal,Algorithm,Graph,Graph Algorithm,Breadth First Search,Graph Traversal,因此,我一直在尝试寻找在未加权图中两个特定节点之间找到所有最短路径的方法,并且我编写了代码,直到我建立了一个“前置”数组,它跟踪我用来到达给定节点的节点。此数组是多维数组,因此,例如,如果从a到D的最短路径可以是a>B>D或a>C>D,则前置数组将如下所示(其中第一行是索引,下面的行是多维数组): 但现在我不知道如何在这个前置数组中找到每个排列,以获得每个可能的最短路径组合,然后打印出来,例如,我想打印出来: All shortest paths: A > B > D A >
All shortest paths:
A > B > D
A > C > D
我听人说你可以通过递归来实现这一点?但是我很迷路。(同时请注意,我并不太担心时间的复杂性)。谢谢您的指导
我听人说你可以通过递归来实现这一点
我不确定他们在说这句话的时候有什么想法,但我给你们一个简单的方法来解决这个问题,它也会以很好的时间复杂性来解决这个问题。使用BFS解决这种情况。依我看,这是你最好的选择
解决方案:
Example graph:
(A,B,C,D,E)
A->B, A->C, B->D, B->E, C->E, D->E
Source: A, Destination: E
Paths: (marked with # are solution paths)
# A->B->E
# A->C->E
A->B->D->E
- 节点
- 水平仪
- 小路(至今)
- 队列的每个元素都表示为一个3值元组(节点、级别、路径)
Example graph:
(A,B,C,D,E)
A->B, A->C, B->D, B->E, C->E, D->E
Source: A, Destination: E
Paths: (marked with # are solution paths)
# A->B->E
# A->C->E
A->B->D->E
- 节点
- 水平仪
- 小路(至今)
- 队列的每个元素都表示为一个3值元组(节点、级别、路径)
打印路径:上面的ABE和ACE。如何打印队列中的所有路径?您如何解释给定示例中队列中的路径?@FallonX
Path for current node=(Path from prev node+prev node)
,例如,您从A访问B,Path=null+'A'=A.eg2。从C访问E,path='A'+'C'=ACYep,明白了。谢谢如何打印队列中的所有路径?您如何解释给定示例中队列中的路径?@FallonXPath for current node=(Path from prev node+prev node)
,例如,您从A访问B,Path=null+'A'=A.eg2。从C访问E,path='A'+'C'=ACYep,明白了。谢谢参见的示例参见的示例
Level Queue
0 (A,0,null)
1 (B,1,A)
1 (C,1,A)
2 (D,2,AB)
2 (E,2,AB) # --> found destination, so, complete L2 fully
2 (E,2,AC) #
3...stop