廣度搜尋和深度搜尋

2022-10-08 20:45:33 字數 2122 閱讀 7081

我現在要從「雙子峰」 前往 「金門大橋」 ,求最短的路徑

//帶單獨參構造方法

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...

深度優先搜尋和廣度優先搜尋

深度優先的思想是先記住當前的起點,然後選定乙個方向一條道走到黑,若失敗則回到起點再選定另外乙個方向走到黑。廣度優先的思想是記住當前的起點,然後選定各個方向的相鄰點作為新的起點,再繼續。可以看出,深度優先和廣度優先都需要記住當前的起點,不同的是深度優先每次只需要記住乙個方向的相鄰點,廣度優先則要記住所...