2012-03-06 63 views
9

我試圖解決的問題涉及到一個MRT系統的樹。如何找到BFS找到的實際路徑?

每個節點最多可以連接4個點,這可以大大簡化。這是我的想法。

struct stop { 
    int path, id; 
    stop* a; 
    stop* b; 
    stop* c; 
    stop* d; 
}; 

我可以編寫代碼來保存我需要BFS搜索所有點的所有信息,但我主要關注的是,儘管BFS找到正確的點,我怎麼能知道它的路徑?

BFS將搜索每一個級別,而當它的一個到達我的目的地,它會跳出運行循環,然後,我會得到一個訪問隊列和未訪問過的隊列,我怎麼告訴用戶當訪問隊列充滿BFS搜索到的每個節點時,他需要訪問哪些內容?

+0

哪裏是中國詞忽略? – mahmood 2012-03-06 19:17:48

+0

@mahmood在我發佈的圖片上。 – 2012-03-06 19:19:20

回答

19

要做到這一點,你需要存儲map:V->V [從頂點到頂點],將從每個節點v,頂點u是「發現」 v地圖。

您將在BFS迭代期間填充此地圖。

後 - 你可以通過簡單地從[在地圖]目標節點去重構的路徑 - 直到你回來的來源,它是侑路徑[逆轉,當然...]

請注意,如果列舉頂點,則此映射可以作爲數組實現。

+1

嘿,如果我必須跟蹤一些長度的多條路徑,該怎麼辦? – bewithaman 2016-08-12 20:12:54

+0

@bewithaman這是一個非常困難的問題。對於某些'k',查找是否存在長度爲'k'的路徑是NP-Hard問題(沒有已知的多項式解) – amit 2016-08-13 06:30:18