ACM專題四總結

2021-07-14 12:48:11 字數 1005 閱讀 6143

最後乙個專題結束了,一學期的acm也終於終止了,這一期專題是我覺得最難的,因此沒有做多少個,但是做的卻認真看了。下面是對本專題的一些總結以及課上聽講筆記整理等:

圖論總結:

1.廣度優先搜尋:用佇列實現(廣度優先搜尋樹不唯一)

從起點開始,標記已經訪問過了;

當佇列非空的時候,就取首元素,然後元素出隊,所有與該元素相鄰且未被訪問過的點入佇列;

標記入隊的元素已經被訪問過了。

2.深度優先搜尋:用棧實現,(遞迴實現)

將頂點入棧,如果有相鄰的點,就將其入棧,直到沒有相鄰點就將其出棧,然後找在棧頂的元素其他的相鄰點,如果沒有則該點出棧直到棧空。

最小生成樹:(prim演算法,kruskal演算法)

prim演算法:

任選乙個點,將這個點加入到乙個集合當中,然後從不在該集合中的點中選乙個點使得該點和任選的那個點之間的距離最短,然後將該點加入集合,該邊為最小生成樹的一條邊。(簡單來說就是從乙個頂點開始找最小邊,並且使加入該邊沒有迴路,直到所有頂點都用完)

kruskal演算法:

將邊按權值從小到大排列後逐個判斷,如果當前邊加入後不會產生環,那麼就把這條邊當作最小生成樹的一條邊,最終得到的結果就是最小生成樹。(留下所有頂點,將所有邊去掉,挨個加邊,但是保證加入該邊不會形成迴路,直到加入(頂點-1)條邊)

最短路徑:(單源最短路徑、每對頂點的最短路徑)

1.單源最短路徑(bell-ford演算法、spfa演算法、dijskal演算法)

dijskal演算法:

設定乙個集合s存放已經找到最短路徑的頂點,其初始狀態包含源點v,對vi∈v-s,假設從源點v到vi的有向邊為最短路徑。以後每求 的

一條最短路徑v, …, vk,就將vk加入集合s中,並將路徑v, …,vk , vi與原來的假設相比較,取路徑長

度較小者為最短路徑。重複上

過程,直到集合v中全部都加

到集合s當中。

2.每對頂點的最短路徑:

floyd:

每次以乙個頂點為源點,呼叫dijkstra演算法n次。  

專題四總結

圖的定義 很簡單,g v,e v e分別表示點和邊的集合。圖的表示 主要有兩種,鄰接矩陣和鄰接表,前者空間複雜度,o v2 後者為o v e 因此,除非非常稠密的圖 邊非常多 一般後者優越於前者。圖的遍歷 寬度遍歷bfs start 1 佇列q empty,陣列bool visited v q.pu...

專題四總結

專題四總結 專題四圖演算法,到目前為止學習了並查集,最小生成樹,最短路。並查集找父節點 int find int x 練習四1003 另一種 int find int a 練習四1022 最小生成樹只會用kruscul 演算法,用這乙個能做不少題了也就懶得學 primer.double kru re...

專題四 總結

在這一專題裡,首先了解了圖資料結構的一些基礎知識以及圖的儲存方式。圖的一些基礎知識包括 圖的概念,圖的一些部件的命名,以及一些基本的數量關係 圖的表示形式一般包括 矩陣,鄰接表 我感到最有趣的就是鄰接表的陣列表示形式了,開銷低且高效,感覺甚是神奇,下面貼出鄰接表的陣列表示形式 struct edge...