2017-06-01 109 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正在教的教訓。 –