图算法问题给你。
我有一个图表,用来表示一个道路网络。因此,在它的循环(一个回旋将是一个微不足道的)。还有一些边缘是双向的,有些是单向的(单向街道).边是按长度加权的。
假设我有两个节点,并且已经计算了它们之间的最短路径。我想要做的是找到连接两个节点的所有其他路径,它们都比某个距离还要短。
下面是ascii技术中的一个例子,其中我用字母标记了边,用数字标记了节点。
F
5----6
E / \ G
3--------4
/ D \
B / \ C
1--------------2
我正在创建一个程序,它将计算未加权图中所有节点的Betwenness中心性。要做到这一点,我必须找到ASSSP (所有单一源最短路径)。在创建程序时,我意识到最终我将有联系(从源到目的地的距离相同,但路径不同)。这使我想到了这个问题。我该如何解决这些关系?如果我使用随机的断线器,那么对于相同的输入,中间中心度的每个输出可能略有不同。让我做一个小小的示范性图:
A
/ \
B C
\ /
D
现在假设A节点是我们希望找到ASSSP的源。可见,有两条路径(A->B->D和A->C->D),bot的长度相同,两者最短。现在我应该选择哪一个,在什么条件
所以我已经看到了类似的问题,但并不完全是我想要的。我需要修改Dijkstra的算法,以返回顶点S(源)和顶点X(目标)之间的最短路径。我想我已经知道该怎么做了,但我需要一些帮助。下面是我修改过的伪代码。
1 function Dijkstra(Graph, source, destination):
2 for each vertex v in Graph: // Initializations
3 dist[v] := infinity ;
使用下面的代码,我试图找到第二条最短路径/第k条最短路径.
// Run Dijkstra's algorithm on given graph
public static void shortestPath(GraphModel graph, int source, int destination, int numberOfVertices)
{
// create min heap and push source node having distance 0
PriorityQueue<NodeModel> minHeap
我有一个网格映射,我需要找到两个节点之间的最短路径,但是路径必须包括一些节点。
我已经考虑过尝试所有的排列,但是映射的大小和必须节点的数目都是可变的,所以我想使用最优的算法。
该地图将类似于以下内容:
-Dark brown square at Y18 is the start point
-Light brown squares from B20 to S20 are the end point (can make just one end point if needed)
-White squares are walls (you cannot go through them)
-Blue