我正在寻找一种算法来计算穿过DAG中特定节点的路径数量(类似于“介于”之间的概念),具有以下条件和约束:
我需要对图中的一组源/目标节点进行计数,而不是所有节点,即对于中间节点n,我想知道从节点集S到集合的多少个不同的最短路径节点D通过n(并且通过不同的,我的意思是每两个具有至少一个非公共节点的路径)
考虑到DAG可能非常大但边缘稀疏,您可能建议使用哪些算法,因此不会优先考虑节点上的深层嵌套循环。
答案 0 :(得分:3)
您可以对每对Src / Dest节点使用广度优先搜索,并查看哪些节点在路径中具有您的给定节点。您必须稍微修改搜索,以便在找到最短路径后,继续清空队列,直到到达导致您增加大小的路径。这样,如果有多条最短路径,您就不会受到随机机会的约束。当然,这只是非加权图形的一个选项。