我現在要從「雙子峰」 前往 「金門大橋」 ,求最短的路徑
//帶單獨參構造方法
public placetree(string p)
//帶全參的構造方法
public placetree(placetree left,placetree right,string p)
}
public static void main(string args)
public void broadfirstsearch(placetree nodehead)
if (null != node.rightplace)
//呈現右孩子和右孩子都壓入佇列中的情況,這樣說好恐怖。}}
public void depthfirstsearch(placetree nodehead)
//以堆疊 (lifo) 實現深度搜尋
stackmystack = new stack<>();
mystack.add(nodehead);
while(! mystack.isempty())
//如果右節點不為空就壓入
if(node.leftplace != null)
//如果左節點不為空就壓入
}//左節點後壓入,左節點後出
}
package datastructure.fs;
import j**a.util.linkedlist;
import j**a.util.queue;
import j**a.util.stack;
public class placebfs
public void broadfirstsearch(placetree nodehead)
if (null != node.rightplace)
//呈現左孩子和右孩子都壓入佇列中的情況,這樣說好恐怖。}}
public void depthfirstsearch(placetree nodehead)
//以堆疊 (lifo) 實現深度搜尋
stackmystack = new stack<>();
mystack.add(nodehead);
while(! mystack.isempty())
//如果右節點不為空就壓入
if(node.leftplace != null)
//如果左節點不為空就壓入
}//左節點後壓入,左節點後出}}
廣度優先遍歷結果:
雙子峰 阿奇大道 商業街 牛羅灣 新宇港 酷客老街 金門大橋 牛羅灣 牛羅灣 金門大橋 金門大橋
深度優先遍歷結果:
雙子峰 阿奇大道 牛羅灣 金門大橋 商業街 新宇港 牛羅灣 金門大橋 酷客老街 牛羅灣 金門大橋
為什麼深度優先搜尋的結果更好,下圖分析:bfs的搜尋步驟圖
bfs 有點像橫向的分層。
「起點」、「商業街」和「阿奇大道」為一層,
「酷客老街」、「新宇港」和「牛羅灣」為第二層,
「牛羅灣」和「終點」為第三次層,「終點」為第四層。
dfs的搜搜步驟圖
dfs 有點向豎向的分列。
「起點」、「阿奇大道」、「牛羅灣」、「終點」 為一列,得到最短解。
"起點"、「商業街」、「新宇港」、「牛羅灣」、「終點」為一列,得到第二種解。
「商業街」、「酷客老街」、「牛羅灣」、「終點」為一列,得到第三種解。
深度搜尋和廣度搜尋
這篇部落格很早之前就寫好了,但是一直沒有發出來。在進行詳細解說之前,我們需要先借用圖的概念,圖就是由一些小圓點 稱為頂點 和連線這些小圓點的直線 稱為邊 組成的。如下圖是由5個頂點 1,2,3,4,5 和5 條邊 1 2,1 2,1 4,2 5,3 4 組成的。現在我們從一號頂點開始遍歷這個圖,使用...
搜尋 深度搜尋 廣度搜尋
迷宮 題目描述 一天extense在森林裡探險的時候不小心走入了乙個迷宮,迷宮可以看成是由n n的格點組成,每個格點只有2種狀態,和 前者表示可以通行後者表示不能通行。同時當extense處在某個格點時,他只能移動到東南西北 或者說上下左右 四個方向之一的相鄰格點上,extense想要從點a走到點b...
深度優先搜尋和廣度優先搜尋
深度優先的思想是先記住當前的起點,然後選定乙個方向一條道走到黑,若失敗則回到起點再選定另外乙個方向走到黑。廣度優先的思想是記住當前的起點,然後選定各個方向的相鄰點作為新的起點,再繼續。可以看出,深度優先和廣度優先都需要記住當前的起點,不同的是深度優先每次只需要記住乙個方向的相鄰點,廣度優先則要記住所...