簡體   English   中英

查找圖中所有節點的算法設計

[英]algorithm design to find all nodes in graph

在游戲中,一組節點通過一組單向邊連接。 在每個節點上都有一個 object 可供選擇。 如果可能的話,設計一個算法來找到一條可以收集所有對象的路徑。 為了使您的任務更容易,您知道從任何節點開始,無論您遵循什么路徑,您都永遠不會回到同一個節點。

這個問題要求我們“如果可能”做一些事情。因此,我在想如果圖是直接的並且對節點本身沒有循環,則可以使用 BFS 遍歷整個圖。 因為如果圖是直接無環圖,這意味着不可能從一條邊開始遍歷整個圖。

找到訪問有向無環圖中所有節點的路徑的最佳方法是拓撲排序,因為它對頂點進行排序,使得對於從頂點 a 到 b 的每個有向邊 ab,a 在排序中位於 b 之前。 這是必不可少的,因為在拓撲排序中,您從沒有傳入邊的頂點開始,這確保您的路徑從正確的頂點(路徑的起點)開始,然后使用 DFS 遍歷圖形的 rest。 盡管 BFS 可以遍歷圖,但無法知道 BFS 是從路徑的開頭開始的。 由於您無法返回節點,因此如果 BFS 從具有傳入邊的邊開始,它將永遠不會到達該節點的父節點,因為那將是一個循環,並且永遠不會到達父節點,您將不會在圖中找到所有節點. 因此,重要的是從沒有傳入邊的頂點開始,正如拓撲排序所描述的那樣

這類似於哈密頓路徑問題。 哈密頓路徑是有向或無向圖中的一條路徑,它只訪問每個頂點一次。 在您的情況下,頂點現在是節點。 如果你能找到一條只訪問每個節點一次的路徑,這意味着你正在嘗試找到哈密頓路徑。 我不認為你可以使用拓撲排序來解決你的問題,你可以谷歌搜索拓撲排序到底做了什么。 哈密頓路徑問題被稱為 NP 完全問題,這意味着它不能使用任何現有算法在多項式時間內求解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM