2017-06-01 81 views
-2

我想知道,当给出起始顶点s时,只有当顶点距离起始顶点不超过三个边时才计算最短路径。Dijkstra算法的修改

我想通过计算父母的数量来做到这一点,如果number_of_parents < = 3那么它是一个有效的路径。

请有人可以澄清这一点对我来说,使用算法?

下面是标准的Dijkstra算法。

Dijkstra(G,W,s) 
    Initialize_Single_Source(G,s) 
    S= {} 
    Q = V[G] 
    while Q != {} do 
     u = extract_min(Q) 
     S = S U {u} 
     for each vertex v element of Adj[u] do 
       relax(u,v,w) 
+1

“我想这样做的”来吧,这样做的来源,然后问一个问题。 –

+2

为什么不创建一个新图形,该图形只包含离源最多3个边的所有节点,并在该图上使用dijkstra算法。您可以通过执行3次BFS来创建较小的图,所有访问过的节点都属于您的较小图。 – Krom

回答

-2

而不是一个顶点,我们用排列L确定水平,即节点相差多少

Dijkstra(G,W, s) 
    Initialize_Single_Source(G,s) 
    S= {} 
    Q = V[G] 
    L = {an array to determine levels of each node, 
    initially all nodes have level "infinite" except for s who has level 0} 
    while Q != {} do 
     u = extract_min(Q) 
     u_level = L[u] 
     if(u_level > 3){ 
     ignore u and don't add it to S; 
     continue; 
     } 
     S = S U {u} 
     for each vertex v element of Adj[u] do 
       relax(u,v,w) 
       in relax function you put L[v] = min(L[v], u_level + 1); 
+1

我认为这是正确的方法..谢谢 – wasuradw

+1

我们不是懒惰的家庭佣工的编码服务。这个答案对任何人都没有帮助,至少是OP,因为他不会学到任何东西。 – Olaf

+0

我希望你在这几年中除了像这样的人以外,没有别的什么,所以你可以学习@Olaf正在教的教训。 –