我正在尝试确定完成下述任务的最佳时间效率算法.
我有一套记录.对于这组记录,我有连接数据,表明该组中的记录对如何相互连接.这基本上代表一个无向图,其中记录是顶点,连接数据是边.
集合中的所有记录都有连接信息(即不存在孤立记录;集合中的每个记录都连接到集合中的一个或多个其他记录).
我想从集合中选择任意两条记录,并能够显示所选记录之间的所有简单路径."简单路径"是指路径中没有重复记录的路径(即仅限于有限路径).
注意:两个选择的记录将始终不同(即开始和结束顶点永远不会相同;没有循环).
例如:
If I have the following records:
A, B, C, D, E
and the following represents the connections:
(A,B),(A,C),(B,A),(B,D),(B,E),(B,F),(C,A),(C,E),
(C,F),(D,B),(E,C),(E,F),(F,B),(F,C),(F,E)
[where (A,B) means record A connects to record B]
如果我选择B作为我的起始记录而E作为我的结束记录,我希望找到通过记录连接将记录B连接到记录E的所有简单路径.
All paths connecting B to E:
B->E
B->F->E
B->F->C->E
B->A->C->E
B->A->C->F->E
这是一个例子,实际上我可能有包含数十万条记录的集合.
如何找到两个图节点之间的所有路径,如下图所示?我尝试了广度优先搜索(BFS)算法,但是虽然它可以找到所有点,但无法找到从(S)tart到(E)nd的所有路径。我还尝试了深度优先搜索(DFS),它更接近。然而,当应用该策略时,因为有一个封闭列表,所以它只会找到一条路径,可能是红线,并且由于紫色和绿色在该区域穿过封闭列表,因此这些路径将被忽略。
我想知道如何获得从 (S)tart 到 (E)nd 的所有路径。在下面的情况下:
