C++ 变化次数有限的“两图”中的最短路径

C++ 变化次数有限的“两图”中的最短路径,c++,c,dijkstra,shortest-path,directed-graph,C++,C,Dijkstra,Shortest Path,Directed Graph,假设我们在一组顶点上有两个有向和正加权图,第一个图表示例如铁路和第二个公交车道;顶点是公共汽车站或铁路站或两者。我们需要找到从A到B的最短路径,但我们不能将传输类型更改超过N次 我试着修改Dijkstra的算法,但它只对一些不那么简单和复杂的图起作用,我想我需要尝试一些不同的东西 如何最好地表示这两个图,以及如何在遍历图时管理有限的更改?有没有可能在这个例子中采用Dijkstra的算法?任何想法和线索都会有帮助 编辑:我忘了一件事,我认为这很重要:N=0,1,2,。。。;我们可以得到我们喜欢的任

假设我们在一组顶点上有两个有向和正加权图,第一个图表示例如铁路和第二个公交车道;顶点是公共汽车站或铁路站或两者。我们需要找到从A到B的最短路径,但我们不能将传输类型更改超过N次

我试着修改Dijkstra的算法,但它只对一些不那么简单和复杂的图起作用,我想我需要尝试一些不同的东西

如何最好地表示这两个图,以及如何在遍历图时管理有限的更改?有没有可能在这个例子中采用Dijkstra的算法?任何想法和线索都会有帮助


编辑:我忘了一件事,我认为这很重要:N=0,1,2,。。。;我们可以得到我们喜欢的任何图形表示,当然,在一个方向上,每两个节点之间最多可以有4条边,一条公交车道和一条铁路,在第二个方向上,每两个节点之间可以有1条公交车道和1条铁路。

我认为这不是最好的方法,但您可以按如下方式创建节点:

Node:(NodeId, GraphId, correspondenceLeftCount)
节点总数将为\u初始\u节点数*允许的\u图数*允许的\u对应数

因此:

对于GraphId不变的边,对应的LeftCount也不变。 为对应添加新边:

NodeId,Graph1,RespondenceLeftCount->NodeId,Graph2,RespondenceLeftCount-1`

对于请求A->B: 您的起点是A,graph1,maxRespondenceLeftCount和A,graph2,maxRespondenceLeftCount。 你的终点是B,图1,0,B、 graph1,MaxRespondenceLeftCount,B,graph2,0,B、 graph2,MaxRespondenceLeftCount


因此,您可能必须根据结束条件调整Dijkstra实现,并能够插入多个起始点。

有向图也是一个字母对,类似于ae,重新标记。这两个图有何关联?这是两张图吗?我看不出修改Dijkstra有什么问题。只需向Dijkstra添加一个分支和绑定组件,从路径列表中永久删除超过允许更改数量的路径。或者干脆不在后续函数中添加这样的邻居。@arne除非我遗漏了什么,否则没有明显的简单方法来修改Dijkstra,以合理的时间复杂度工作。如果你真的有这样的修改,你介意简单地描述一下,更详细地描述一下吗?