日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

数据结构与算法(C++)– 图(Graph)

發布時間:2025/3/12 c/c++ 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构与算法(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|)。

  • 首先把起點的長(dv)設為0其它點的長設為∞
  • 使用廣度優先搜索算法更新點的dv值(鄰接點+1),并記錄更新點的父點(pv)
  • 直到所有的點都被更新過,停止搜索

  • 總結

    以上是生活随笔為你收集整理的数据结构与算法(C++)– 图(Graph)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。