數據結構c語言——有關圖的遍歷、圖的算法、最小生成樹

從給定圖中任意指定的頂點(稱爲初始點)出發,按照某種搜索方法沿着圖的邊訪問圖中的所有頂點,使每個頂點僅被訪問一次,這個過程稱爲 圖的遍歷

圖的遍歷得到的頂點序列稱爲圖遍歷序列。

圖的遍歷算法有深度優先搜索算法和廣度優先搜索算法。

深度優先搜索(Depth First Search–DFS)遍歷類似樹的先序遍歷,是樹的先序遍歷的推廣。

深度優先搜索算法思想:

設初始狀態時圖中的所有頂點未被訪問,則:
⑴ :從圖中某個頂點vi出發,訪問vi;然後找到vi的一個鄰接頂點vi1 ;
⑵:從vi1出發,深度優先搜索訪問和vi1相鄰接且未被訪問的所有頂點;
⑶:轉⑴ ,直到和vi相鄰接的所有頂點都被訪問爲止
⑷ :繼續選取圖中未被訪問頂點vj作爲起始頂點,轉(1),直到圖中所有頂點都被訪問爲止。在這裏插入圖片描述

廣度優先搜索算法思想:

算法思想:

設初始狀態時圖中的所有頂點未被訪問,則:
⑴ :從圖中某個頂點vi出發,訪問vi;
⑵:訪問vi的所有相鄰接且未被訪問的所有頂點vi1,vi2,…,vim;
⑶:以vi1,vi2, …,vim的次序,以vij(1≦j≦m)依此作爲vi ,轉⑴;
⑷ :繼續選取圖中未被訪問頂點vk作爲起始頂點,轉⑴,直到圖中所有頂點都被訪問爲止。

在這裏插入圖片描述
生成樹一定是連通的,一定是連通的生成子圖這句話是對的
但是,連通的生成子圖一定是生成樹就是錯的
一個圖可以有多個生成樹,有n個頂點的生成樹的最少的邊是n-1個

最小生成樹:

生成樹、生成森林:一個連通圖(無向圖)的生成樹是一個極小連通子圖,它含有圖中全部n個頂點和只有足以構成一棵樹的n-1條邊,稱爲 圖的生成樹
關於無向圖的生成樹的幾個結論:
◆ 一棵有n個頂點的生成樹有且僅有n-1條邊;
◆ 如果一個圖有n個頂點和小於n-1條邊,則是非連通圖;
◆如果多於n-1條邊,則一定有環;
◆有n-1條邊的圖不一定是生成樹。

一個連通圖的生成樹是一個極小連通子圖,它含有圖中全部n個頂點和構成一棵樹的(n-1)條邊。  
在這裏插入圖片描述
命題:如果在一棵生成樹上添加一條邊,必定構成一個環。
由深度優先遍歷得到的生成樹稱爲深度優先生成樹
由廣度優先遍歷得到的生成樹稱爲廣度優先生成樹
連通圖:

僅需調用遍歷過程(DFS或BFS)一次,從圖中任一頂點出發,便可以遍歷圖中的各個頂點,產生相應的生成樹。 
非連通圖:

需多次調用遍歷過程。每個連通分量中的頂點集和遍歷時走過的邊一起構成一棵生成樹。所有連通分量的生成樹組成非連通圖的生成森林。
帶權連通圖:

對於帶權連通圖G (每條邊上的權均爲大於零的實數),可能有多棵不同生成樹。
每棵生成樹的所有邊的權值之和可能不同。
其中權值之和最小的生成樹稱爲圖的最小生成樹。

最小生成樹有兩種算法,即 普里姆算法(Prim)克魯斯卡爾算法(Kruskal)
在這裏插入圖片描述
普里姆算法(Prim):一條路走下去(按照權值大小的順序),知道這條路到了頭再換路
在這裏插入圖片描述
克魯斯卡爾算法(Kruskal):找兩個權值最小的邊畫出,保證每個頂點只能構成一條邊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章