演算法之廣度優先搜尋

2021-07-30 14:36:45 字數 1913 閱讀 4798

查詢最短路徑

廣度優先搜尋可回答兩類問題:

第一類問題:從節點a出發,有前往節點b的路徑嗎?

第二類問題:從節點a出發,前往節點b的哪條路徑最短?

資料結構

人際關係圖

**實現

map> graph = new hashmap<>();

graph.put("我", arrays.aslist("孫", "吳", "李"));

graph.put("孫", arrays.aslist("鄭", "周"));

graph.put("吳", arrays.aslist("周"));

graph.put("李", arrays.aslist("錢", "趙"));

graph.put("鄭", arrays.aslist());

graph.put("周", arrays.aslist());

graph.put("錢", arrays.aslist());

graph.put("趙", arrays.aslist());

queuesearchqueue = new linkedlist<>(); //建立乙個佇列

listsearched = new arraylist<>(); //這個列表用於記錄檢查過的人

searchqueue.addall(graph.get("我")); //將我的朋友都加入到搜尋佇列中

boolean flag = false;

//尋找周

while (!searchqueue.isempty())

searchqueue.addall(graph.get(person)); //不是周。將這個人的朋友都加入搜尋佇列

searched.add(person); //將這個人標記為檢查過

}if (flag) else

步驟分析

步驟描述

結果searchqueue

searched

1將我的朋友都加入到搜尋佇列中

「孫」, 「吳」, 「李」

2「孫」出隊並檢查」孫」

「孫」不是」周」,將」孫」設為已檢查,並將」孫」的朋友加入搜尋佇列

「吳」, 「李」, 「鄭」, 「周」

「孫」3

「吳」出隊並檢查」吳」

「吳」不是」周」,將」吳」設為已檢查,並將」吳」的朋友加入搜尋佇列

「李」, 「鄭」, 「周」, 「周」

「孫」,」吳」

4「李」出隊並檢查」李」

「李」不是」周」,將」李」設為已檢查,並將」李」的朋友加入搜尋佇列

「鄭」, 「周」, 「周」,」錢」, 「趙」

「孫」,」吳」,」李」

5「鄭」出隊並檢查」鄭」

「鄭」不是」周」,將」鄭」設為已檢查,並將」鄭」的朋友加入搜尋佇列

「周」, 「周」,」錢」, 「趙」

「孫」,」吳」,」李」,」鄭」

6「周」出隊並檢查」周」

「周」是」周」,跳出迴圈,查詢結束

「周」,」錢」, 「趙」

「孫」,」吳」,」李」,」鄭」

執行時間

如果你在你的整個人際關係網中搜尋」周」,就意味著你將沿每條邊前行(記住,邊是從乙個人到另乙個人的箭頭或連線),因此執行時間至少為o(邊數)。你還使用了乙個佇列,其中包含要檢查的每個人。將乙個人新增到佇列需要的時間是固定的,即為o(1),因此對每個人都這樣做需要的總時間為o(人數)。所以,廣度優先搜尋的執行時間為o(人數 + 邊數),這通常寫作o(v + e),其中v為頂點(vertice)數,e為邊數。

搜尋演算法之廣度優先

employee info class employee class solution definition for a node.class node node int val,vector children class solution if v2.size 0 v.push back v2 i...

演算法之深度優先搜尋和廣度優先搜尋

深度優先搜尋演算法 depth first search 是搜尋演算法的一種。它沿著 樹的深度 遍歷樹的節點,盡可能深的 搜尋樹的分支。當節點v的所有邊都己被探尋過,搜尋將回溯到發現節點v的那條邊的起始節點。這一過程一直進行到已發現從源節點可達的所有節點為止。如果還存在未被發現的節點,則選擇其中乙個...

廣度優先搜尋演算法

廣度優先搜尋 bfs 這個是第乙個研究的課題,廣度優先搜尋也叫寬度優先搜尋,英文為breadth first searth,開始看的時候一頭霧水,基本也能懂大致意思,但是還不是真正的理解,今天又仔細看看,大致理解上又更深了一層吧。下面來總結下,自己的一些體會,以及對它的獨到的理解。大的方面來說它是一...