数据结构与算法(C++)– 图(Graph)
生活随笔
收集整理的這篇文章主要介紹了
数据结构与算法(C++)– 图(Graph)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據結構與算法(C++)– 圖(Graph)
1、圖的基礎概念
定義:一個圖G=(V, E)由頂點(vertex)的集V和邊(edge)的集E組成。
- 邊(edge):一對點即為一條邊(v, w),其中v, w ∈ V
- 有向圖(directed):點對是有序的
- 無向圖(undirected):點對是無序的
- 鄰接(adjacent):w 鄰接到 v,當且僅當(v, w )∈ E
- 權(weight)/值(cost):邊上的值
- 路徑(path):連通兩點間的邊
- 長(lengh):路徑上的邊數
- 簡單路徑(simple path):路徑上的頂點都是互異的
- 環(cycle):有向圖中,首尾相連長度至少為1的簡單路徑。
- 無環(acyclic):有向圖中中沒有環
- 連通的(connected):無向圖中每一個頂點到其它頂點都存在一條路徑
- 強連通的(strongly connected):有向圖具有連通的性質
- 基礎圖(underlying graph):無向圖去掉邊的方向
- 弱連通的(connected):有向圖的基礎圖是連通的
- 完全圖(complete graph):每一對頂點都存在一條邊
幾個關系:
- n 個頂點的無向連通圖,至少有 n-1 條邊
- n 個頂點的有向強連通圖,至少有 n 條邊
- n 個頂點的無向完全圖,有 n(n-1)/2 條邊
- n 個頂點的有向完全圖,有 n(n-1) 條邊
2、圖的表示
圖有兩種表示方法:鄰接矩陣,鄰接表
鄰接矩陣: 稠密(dense),復雜度為O(|V|^2)
鄰接表: 稀疏(sparse),復雜度為O(|E| + |V|)
3、廣度優先搜索(Breadth-first search,BFS)
定義: 按照由近到遠的層進行搜索
實現: 使用隊列(queue)結構實現。首先起點入隊,隊列出隊一個元素,把鄰接于該元素的所有頂點入隊,循環直到隊列為空即所有頂點都被訪問過。
4、深度優先搜索(Depth-first search,DFS)
定義: 按照由深到淺的遞歸進行搜索
實現: 使用棧(stack)結構實現。首先起點入棧,出棧一個元素,把鄰接于該元素的所有頂點入棧,循環直到棧為空即所有頂點都被訪問過。
5、有向無權圖的最短路徑
實現: 使用廣度優先搜索,復雜度為O(|E| + |V|)。
總結
以上是生活随笔為你收集整理的数据结构与算法(C++)– 图(Graph)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 累加器A用c语言,累加器A的主要作用是什
- 下一篇: linux远程连接最大数是多少,Linu