我不确定这个问题的名称,所以还没有真正研究过它。我有一个完整的加权图,包含一个起始和结束节点以及n个不同的节点集(我们称之为红色,蓝色和绿色),每个节点都有m个成员节点。
我需要找到从开始到结束的最短路径,并且必须通过一个红色,一个蓝色和一个绿色节点;有这个算法吗?
延伸将是我需要找到最短的路径,同时首先访问蓝色,然后是绿色,然后是红色(再次,每次一次);有一个吗?
答案 0 :(得分:2)
扩展部分似乎更容易。
假设每个节点都有一种颜色(这是真的吗?),如果要删除违反所需颜色序列的边缘,你需要做的就是。
例如,删除离开开始的所有边,除了那些转到蓝色节点的边。同样,删除所有留下蓝色节点的边,除了那些转到绿色节点的边。
然后你可以简单地在简化图上运行一个标准的最短路径算法(例如Dijkstra)。
如果颜色数量不是太大,那么您可以采用相同的算法来解决原始问题。我们的想法是为每种颜色排列找到最短路径(使用上述算法)。