Python 查找必须使用两个节点列表中任意两个节点的最短路径
我实现了一个函数,它使用Dijkstra算法在加权无向图(正权重)中找到从给定源节点到任意给定目标节点的最短(最低权重)路径 我有两个列表A和B,每个列表都至少包含一个节点位置,并且它们包含的每个节点都是有效的(在图中)。列表A中的节点也可以在列表B中,反之亦然 我需要扩展我的函数,以便它也将列表A和B作为输入,并找到从源节点到目标节点的最短路径,该路径至少使用A和B中的一个节点。此外,虽然它可以在路径中的任意点使用A和B节点,但它必须在使用A节点后使用B节点(或使用A和B中的节点) 如果节点同时位于a和B中,则它立即满足此要求 源节点和目标节点都可以位于A和/或B中 e、 g 有效路径(S为源,D为目标,N为不在A或B中的节点):Python 查找必须使用两个节点列表中任意两个节点的最短路径,python,python-3.x,dijkstra,Python,Python 3.x,Dijkstra,我实现了一个函数,它使用Dijkstra算法在加权无向图(正权重)中找到从给定源节点到任意给定目标节点的最短(最低权重)路径 我有两个列表A和B,每个列表都至少包含一个节点位置,并且它们包含的每个节点都是有效的(在图中)。列表A中的节点也可以在列表B中,反之亦然 我需要扩展我的函数,以便它也将列表A和B作为输入,并找到从源节点到目标节点的最短路径,该路径至少使用A和B中的一个节点。此外,虽然它可以在路径中的任意点使用A和B节点,但它必须在使用A节点后使用B节点(或使用A和B中的节点) 如果节点同
- S>A>B>D
- S>B>A>B>D
- S>N>B>A>N>B>D
- S>(A&B)>D
- S(A)>D(B)
- S>B>A>D
我怎样才能扩展它,使它保持Dijkstra算法的复杂性,O(Elog(V))?E是边的,V是顶点的。我在想,一定有一种方法,我可以使用Dijkstra的算法,以恒定的次数,这样复杂性就不会改变。为任何帮助干杯。我建议通过跟踪每个节点的两个以上值来扩展Dijkstra。访问A的最短路径和访问A>B的最短路径(A和B) 通常,您会跟踪到Dijkstra中每个节点的最短路径。现在,您将跟踪三条最短路径。您仍将处理单个步骤并向队列中添加新邻居,但这一次有三种可能:
始终选择具有最小暂定距离的节点,如原始算法中所示。因此,到达节点的条件并不重要。给定的复杂性是不正确的。它应该是O(V+Elog(V))或O(E+Vlog(V)),我想这可能就是它!我目前正在做这件事,我会告诉你我的进展。