圖的基本知識

1.簡介

圖(Graph)是由頂點的有窮非空集合和頂點之間的邊的集合組成,通常表示為:G(V,E),G表示一個圖,V是圖G中頂點的集合,E是圖G中邊的集合。

圖是一種復雜的非線性結構,在圖結構中,每個元素都可以有零個多個前驅,也可以有零個或多個后繼,元素之間的關系是任意的。

2.分類

圖分無向圖和有向圖

無向圖:由頂點和邊構成;

有向圖:由頂點和弧(有向邊)構成,弧分弧頭和弧尾

多重圖:關聯一對頂點的無向邊(或有向邊,邊的方向一致)多于1條(稱這些邊為平行邊)

簡單圖:既不含平行邊也不含環的圖成為簡單圖

(有向)完全圖:如果任意兩個頂點之間都存在邊叫完全圖,有向的邊叫有向完全圖

連通圖:在無向圖G中,任意兩個頂點是相通的就是連通圖

網:圖中的邊帶權值的話,叫網

3.圖的頂點和邊

頂點的度:頂點關聯邊的數目

有向圖中:入度,方向指向頂點的邊;出度,方向背向頂點的邊

路徑長度:路徑上邊或弧的數目

4.存儲結構

4.1.鄰接矩陣

圖的鄰接矩陣存儲方式是用兩個數組來表示圖。一個一維數組存儲圖中頂點信息,一個二維數組(稱為鄰接矩陣)存儲圖中的邊或弧的信息。

實際中,我們發現對于邊數相對頂點較少的圖,這種結構存在對存儲空間的極大浪費。

4.2.鄰接表

圖的鄰接表存儲方式是用一個一維數組存頂點,數組中每一項還需要存儲指向下一個鄰接點的指針,以便于查找該頂點的邊信息。圖中每個頂點的所有鄰接點構成一個線性表,由于鄰接點不定,故用單鏈表存儲。

?

5.遍歷

5.1.深度優先遍歷

深度優先遍歷(DFS,也稱深度優先搜索):假設給定圖G的初態是所有頂點均未曾訪問過。在圖G中任選一點Vi為初始出發點(源點),則深度優先遍歷如下:首先訪問出發點Vi,并將其標記為已訪問過;然后依次從Vi出發探索Vi的每個鄰接點Wj。若Wj未曾訪問過,則以Wj為新的出發點繼續進行深度優先遍歷,直至圖中所有與源點Vi有路徑相通的頂點均已被訪問為止。如此時圖中任有未被訪問的頂點,則另選一個尚未訪問的頂點作為新的源點重復上述過程,直至圖中所有頂點均已被訪問為止。

5.2.廣度優先遍歷

廣度優先遍歷(BFS,也稱廣度優先搜索):這是一種盲目搜索法,它會系統的展開并檢查圖中的所有節點,不考慮搜索目標,一層一層逐層向下遍歷,直至遍歷完整張圖。

?

參考資料:《大話數據結構》

轉載于:https://www.cnblogs.com/xuchaoi/p/7843978.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251487.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251487.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251487.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

面向對象之封裝

封裝的兩個含義: 1.把對象的狀態和行為看成一個統一的整體,將二者存放在一個獨立的模塊中(類); 2."信息隱藏", 把不需要讓外界知道的信息隱藏起來,盡可能隱藏對象功能實現細節,字段; 封裝機制在程序中的體現是:把描述對…

bootstrap --- 面板

基本樣式 <div class"panel panel-default"><div class"panel-heading">面板頭...</div><div class"panel-body">面板身體...</div><div class"panel-footer">面板腳...</div> </div>…

C#控件訪問調用它的父級頁面

C#控件訪問調用它的父級頁面 你建立一個winform程序,出來一個默認窗體Form1&#xff0c;再添加一個UserControl&#xff0c;默認名字為UserControl1;在Form1的窗口里寫如下的代碼: public partial class Form1 : Form { //寂義一個UserControl1對象 UserCo…

NSMapTable

跟NSDictionary用法差不多&#xff0c;不過區別是NSMapTable可以設置內存選項&#xff0c;例如可以設置key跟value的內存屬性&#xff08;weak/strong&#xff09;&#xff0c;從而避免內存泄露。 例如這個 weakToWeakObjectsMapTable 方法可以獲得一個key跟value都是weak的字典…

《Linux命令行與shell腳本編程大全 第3版》Shell腳本編程基礎---23

以下為閱讀《Linux命令行與shell腳本編程大全 第3版》的讀書筆記&#xff0c;為了方便記錄&#xff0c;特地與書的內容保持同步&#xff0c;特意做成一節一次隨筆&#xff0c;特記錄如下&#xff1a;轉載于:https://www.cnblogs.com/guochaoxxl/p/7888810.html

bootstrap --- 彈出對話框

<button class"btn btn-primary btn-lg" data-toggle"modal" data-target"#myModal">點擊觸發模態對話框 </button><div class"modal fade" id"myModal" tabindex"-1" role"dialog" ari…

模意義下的FFT算法

//寫在前面 單就FFT算法來說的話&#xff0c;下面只給出個人認為比較重要的推導&#xff0c;詳細的介紹可參考  FFT算法學習筆記 令v[n]是長度為2N的實序列&#xff0c;V[k]表示該實序列的2N點DFT。定義兩個長度為N的實序列g[n]和h[n]為 g[n]v[2n],  h[n]v[2n1],  0<n…

bootstrap --- 標簽頁切換

很多時候,我們希望寫一個簡單的標簽頁.以下使用bootstrap來實現… 首先導入bootstrap的依賴:jquery的依賴、bootstrap的依賴 注意: jquery的依賴要在bootstrap依賴的前面導入,原因是:bootstrap的某些功能是在jquery的基礎上實現的 在 https://www.bootcdn.cn/jquery/ 導入jqu…

bootstrap --- 鼠標停留提示事件

使用bootstrap可以很簡單的實現鼠標停留,提示的效果 <a href"#" data-toggle"tooltip" data-placement"right" title"Tooltip on right" class"btn btn-primary">工具提示</a> // data-toggle"tooltip&…

day 3 list列表生成式

1.定義一個list列表&#xff0c;里面元素是0-33 a []i 0 while i<33:a.append(i)i1print(a) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32] 2.range &#xff08;切片&#xff09; 1&…

2020校招前端知識點整理

自用的前端知識點整理筆記&#xff08;長期更新&#xff09; 開啟面試造火箭模式&#x1f4d4;&#x1f448;點擊獲得更好的閱讀體驗 有錯誤的地方請指出&#xff0c;感激不盡 HTML 你是如何理解HTML語義化的&#xff1f;? 總結&#xff1a;用恰當的標簽來標記內容。 比如…

day18 面向對象

---恢復內容開始--- 1.1類的相關知識 聲明 def functionName(args):"函數文檔字符串""""函數體""" class 類名:"""類的文檔字符串""""""類體""" #我們創建一個類 class…

Android studio導入support-v4.jar

support-v4.jar是support library。路徑為<sdk>/extras/android/support/v4/android-support-v4.jar.轉載于:https://www.cnblogs.com/Magina-learning/p/7899788.html

html5 --- 特性檢測

使用Moderniz庫可以對H5的特性進行檢測,下載網址: https://modernizr.com // 在HTML 中的head標簽中導入 <script src"/modernizr.min.js"></script>// ps:注意src的路徑畫布(canvas)特性檢測: if (Modernizr.canvas){// 開始畫... } else {// 瀏覽器不…

編程學習筆記(第三篇)面向對象技術高級課程:緒論-軟件開發方法的演化與最新趨勢(3)軟件開發的現狀、UML擴展...

一、軟件開發的現狀 軟件領域正在發生一個巨變&#xff0c;特別是近幾年來&#xff0c;軟件領域正在發生翻天覆地的變化。 這一變化主要以這個云 端大數據&#xff0c; 這些是隨著目前最先進的一些技術的產生而產生的。 隨著這些新的技術以及軟件開發方法的不斷的提升&#xf…

百度地圖得到兩地點(通過經緯度)的距離、 通過經緯度獲取詳細地址

1 /**2 * 計算兩點間的距離3 * pt1 {lng:"12.34",lat:"3423"}第一個點的經緯度4 * pt2 {lng:"12.34",lat:"3423"}第二個點的經緯度5 * */6 getDistance:function(pt1,pt2){7 var map new BMap.Map(&…

html5 --- canvas繪制網格并畫x、y軸

效果如下: // 代碼如下: <body><canvas width"500" height"375" id"c"></canvas><script>(function draw_a() {var a_canvas document.getElementById("c");var context a_canvas.getContext("2d&qu…

系統調用軟中斷處理程序system_call分析

最近學習了系統調用的整個流程&#xff0c;這里總結并記錄。同時作為學習孟寧老師的linux內核課程的作業。 唐建&#xff0c;《Linux內核分析》MOOC課程http://mooc.study.163.com/course/USTC-1000029000 1、概述 系統調用整個過程為&#xff1a;API——封裝例程——system_c…

Poj3261 Milk Patterns

題目傳送門 題意&#xff1a;對一個字符串求一個最長的子串使得它至少出現k次 額&#xff0c;因為這個題目呢&#xff0c;他的字符集非常大(100W) 所以直接用SAM是不行了&#xff0c;我們考慮用離散化SA&#xff0c;讓后就可以分塊rmq了 當然這樣很麻煩&#xff0c;我們還是用S…

html5 --- 使用canvas畫一個漸變矩形

我們希望得到如下效果: 首先準備畫布 // HTML <canvas width"500" height"375" id "a"> </canvas>// JS // 獲取畫布的DOM元素 var a_canvas document.getElementById("1"); // 獲取畫布的上下文元素(之后,就可以使用…