資料結構與演算法分析(八) BFS演算法

2021-10-01 08:22:30 字數 1601 閱讀 5948

圖的組成:

頂點(vertices)、邊(edges)

圖的一些概念:

1.鄰接(adjacent):v1和v2相連線

2.路徑(path):乙個頂點序列

3.圈(cycle):乙個頂點出現了兩次

圖的表示:

1.鄰接矩陣(空間大,但是速度快)

2.鄰接表(空間小,但速度慢)

**實現:

實現的是無權圖

1.根據邊的數目確定迴圈次數(一條邊對應兩個頂點)

2.用乙個元素為vector的資料去組織資料,即每個頂點對應乙個vector存放鄰接頂點

3.每一次存放一條邊對應的兩個頂點

/**

*@name build_graph:建立乙個無權無向圖 手動輸入或者從二維陣列中讀取

**/void

build_graph()

*///從二維陣列中讀取

for(

int i=

0;i<

12;i++

)}

廣度優先遍歷,搜尋最短路徑

演算法描述:

1.給定起點和終點,從起點開始輻射;

2.利用佇列去存放待輻射的頂點,首先應將起點推入佇列;

3.從起點輻射到起點的所有鄰接頂點,將起點推出佇列(並標記已訪問過),將所有鄰接頂點(未訪問過的)推入佇列,並標記他們的上一頂點(為了最後的還原路徑);

4.持續輻射,直到匹配到終點,然後利用之前標記的上一頂點,還原出最短路徑;

**實現:

/**

*@name bfs:廣度搜尋

*@param1 t:傳入的鄰接表

*@param2 s0:起始位置

*@param3 st:終止位置

**/void

bfs(vector<

int> t[max_size]

,int s0,

int st)

;int v;

int pre[10]

=;//用來儲存上一節點

q.push

(s0)

; know[s0]=1

;while

(!q.

empty()

) result.

push_back

(temp)

;//儲存初始值

//輸出最短路徑

cout<<

"the path is "

int>

::iterator it;

//定義乙個迭代器 從後向前迭代

for(it=result.

end()-

1;it!=result.

begin()

;it--

) cout<<

*it

return;}

else}}

}}

未完待續。。。

資料結構與演算法(八)

運算元入棧,然後碰到操作符出棧頂的兩個運算元,之後得到結果加到棧頂。def postfix evaluation postfix,operand stack 運算元棧 for i in postfix 1 若為運算元 字母 入棧 if97 ord i 122 i float join operand...

資料結構與演算法(bfs與dfs)

引言 經過上一次的學習,我們明白了圖的基本操作。這一次,我們學習圖的兩種基本演算法 bfs與dfs。2.bfs演算法 後記介紹 dfs演算法也叫深度優先搜尋,核心思想是從某一位置或者狀態出發,進行搜尋,直到找到為止。形象的可以認為是所有的可能都走一邊,既暴力。深度優先遍歷圖的方法是,從圖中某頂點v出...

資料結構與演算法分析

資料結構與演算法分析可以稱得上是程式設計師必須修煉的內功心法。資料的儲存結構 資料元素在計算機中的儲存方式 資料的操作集合 對一種資料型別的資料所有操作,例如對資料的增刪改查等等!演算法分析主要分析 下面是一些常用資料結構 一 線性表 1.陣列實現 2.鍊錶 二 棧與佇列 三 樹與二叉樹 1.樹2....