試圖實現圖的雙向搜索,但失敗了很多次。 據我瞭解,我應該以某種方式合併2個廣度優先搜索「開始」和「結束」頂點。基本情況是當兩個樣本都找到相同的頂點時。 您能否提供一個代碼示例(如果可能,請使用Java或JavaScript)或鏈接到雙向搜索的代碼。圖的雙向搜索實現
Q
圖的雙向搜索實現
0
A
回答
5
假設你有節點是這樣的:
public static class Node {
private final T data;
private final Set<Node> adjacent = new HashSet<Node>();
public Set<Node> getAdjacent() {
return adjacent;
}
public Node(T data) {
this.data = data;
}
public T getData() {
return data;
}
// returns if the node was added, false if already there
public boolean addAdjacent(Node node) {
return adjacent.add(node);
}
// returns true if any were added
public boolean addAdjacents(Set<Node> nodes) {
return adjacent.addAll(nodes);
}
}
那麼我認爲你是這樣的事情後:
public static boolean pathExistsBidirectional(Node a, Node b) {
// BFS on both nodes at the same time
Queue<Node> queueA = new Queue<Node>();
Queue<Node> queueB = new Queue<Node>();
Set<Node> visitedA = new HashSet<Node>();
Set<Node> visitedB = new HashSet<Node>();
visitedA.add(a);
visitedB.add(b);
queueA.add(a);
queueB.add(b);
while (!queueA.isEmpty() && !queueB.isEmpty()) {
if (pathExistsBidirectionalHelper(queueA, visitedA, visitedB)) {
return true;
}
if (pathExistsBidirectionalHelper(queueB, visitedB, visitedA)) {
return true;
}
}
return false;
}
private static boolean pathExistsBidirectionalHelper(Queue<Node> queue, Set<Node> visitedFromThisSide, Set<Node> visitedFromThatSide) {
if (!queue.isEmpty()) {
Node next = queue.remove();
for (Node adjacent : next.getAdjacent()) {
if (visitedFromThatSide.contains(adjacent)) {
return true;
} else if (visitedFromThisSide.add(adjacent)) {
queue.add(adjacent);
}
}
}
return false;
}
+0
我已使用 測試過此節點node1 = new Node(「jan」); 節點node2 =新節點(「karol」); 節點node3 =新節點(「lukasz」); node1.addAdjacent(node2); node2.addAdjacent(node3); System.out.println(pathExistsBidirectional(node1,node3)); 它不起作用,打印錯誤...或者我做錯了嗎? – hanskoff
相關問題
- 1. 雙向A *(A-star)搜索
- 2. Android圖像搜索實現Google圖像搜索
- 3. 如何實現雙向類?
- 4. 雙向鏈表實現
- 5. 如何實現像谷歌地圖搜索一樣的搜索?
- 6. 雙向搜索的時間複雜度
- 7. 在搜索欄中實現Google搜索
- 8. 具體的搜索實現
- 9. 在表視圖中實現搜索欄
- 10. 如何實現過濾器搜索/列表視圖搜索?
- 11. 快速搜索雙向鏈表
- 12. 3層結構搜索(雙向)
- 13. 搜索第n級的朋友在neo4j.rb在雙向關係圖
- 14. 最快的雙向Java序言實現
- 15. ListBox.SelectedItems的雙向手動綁定實現?
- 16. 實現搜索字段android
- 17. 實現搜索textField到jTable
- 18. 實現Android音樂搜索
- 19. 實現A *搜索算法
- 20. 使用Rx.Net搜索實現
- 21. 如何實現redux搜索
- 22. 如何實現搜索?
- 23. 實現二進制搜索
- 24. 使用Laravel實現搜索
- 25. 雙地圖結構實現?
- 26. 如何在多個列上實現雙向唯一索引
- 27. 如何在JavaScript中的有向圖內實現對所有路徑的搜索?
- 28. 如何使用Dojo實現實時搜索/搜索建議?
- 29. 試圖實現ng-repeate和表單之間的雙向綁定
- 30. 實現向圖的每個節點有兩個邊緣 - 遞歸搜索功能
問計場外資源是題外話。你如何用你的代碼展示你的問題[mcve]? –
#cricket_007我不知道如何開始寫這樣的代碼。我已經花了8天的時間嘗試去做。我沒有任何代碼,因爲我不知道如何開始思考編寫代碼。這就是爲什麼我沒有任何代碼示例。對於那個很抱歉。我需要提示。 –
我不明白什麼是雙向搜索。常規深度或寬度首次搜索有什麼問題? –