对于具有不同的必经节点集的最短路径,我可以使用哪种算法?
Which algorithm could I use for shortest path with distinct sets of must-pass nodes?
我不确定这个问题的名称,所以没能真正研究它。我有一个完整的加权图,有一个开始和结束节点以及 n 个不同的节点集(我们称它们为红色、蓝色和绿色),每个节点有 m 个成员节点。
我需要找到从头到尾的最短路径,并且必须恰好通过一个红色、一个蓝色和一个绿色节点;有算法吗?
一个扩展是我需要找到最短路径,同时首先访问蓝色,然后是绿色,然后是红色(同样,每次访问恰好一次);有这个吗?
扩展部分似乎更简单。
假设每个节点都有一种颜色(这是真的吗?)如果要删除会违反所需颜色序列的边,您需要做的所有事情。
例如,删除所有离开起点的边,除了那些去蓝色节点的边。同样,删除所有离开蓝色节点的边,除了那些去绿色节点的边。
然后你可以在缩减图上简单地运行一个标准的最短路径算法(例如Dijkstra)。
如果颜色的数量不是太多,那么你可以采用相同的算法来解决原来的问题。这个想法是为颜色的每个排列找到最短路径(使用上述算法)。
我不确定这个问题的名称,所以没能真正研究它。我有一个完整的加权图,有一个开始和结束节点以及 n 个不同的节点集(我们称它们为红色、蓝色和绿色),每个节点有 m 个成员节点。
我需要找到从头到尾的最短路径,并且必须恰好通过一个红色、一个蓝色和一个绿色节点;有算法吗?
一个扩展是我需要找到最短路径,同时首先访问蓝色,然后是绿色,然后是红色(同样,每次访问恰好一次);有这个吗?
扩展部分似乎更简单。
假设每个节点都有一种颜色(这是真的吗?)如果要删除会违反所需颜色序列的边,您需要做的所有事情。
例如,删除所有离开起点的边,除了那些去蓝色节点的边。同样,删除所有离开蓝色节点的边,除了那些去绿色节点的边。
然后你可以在缩减图上简单地运行一个标准的最短路径算法(例如Dijkstra)。
如果颜色的数量不是太多,那么你可以采用相同的算法来解决原来的问题。这个想法是为颜色的每个排列找到最短路径(使用上述算法)。