1. 程式人生 > 實用技巧 >7.1 圖的定義和術語

7.1 圖的定義和術語


title: 資料結構 | 圖-1 | 圖的定義和術語
date: 2019-11-25 21:18:14
tags: 資料結構


本篇記錄了資料結構圖這一章學習的第一部分,
即圖的定義和術語。

有向圖

  • 頂點:資料

  • 表示方法:<v,w>有序對
  • 弧頭 v
  • 弧尾 w

無向圖

  • 表示方法:(v,m)無序對
    <>
  • 如何表示一個無向圖?
    G1 =(V1 , {E1} )
    V1={v1,v2,v3,v4,v5}
    G1={ (v1,v2),(v2,v3),(v3,v4),(v3,v5),(v1,v4),(v2,v5) }

圖的抽象資料型別定義:

ADT Graph{
	資料物件V:頂點集;
	資料關係R:R={VR}
		VR={<v,w>|v,w∈V,且P(v,w), <v,w>表示從v到w的弧,
			P(v,w)定義了弧<v,w>的意義或資訊}
}

圖的基本操作

1 CreateGraph(&G, V, VR);
初始條件:V是圖的頂點集,VR是圖中弧的集合
操作結果:按V和VR的定義構造圖G
2 DestroyGraph(&G);
初始條件:圖G存在
操作結果:銷燬圖G
3 LocateVex(G,u);
初始條件:圖G存在,u和G中頂點有相同特徵
操作結果:若G中存在頂點u,則返回該頂點在圖中位置;否則返回其它資訊。
4 GetVex(G, v);
初始條件:圖G存在,v是G中某個頂點
操作結果:返回v的值
5 PutVex(&G, v, value);
初始條件:圖G存在,v是G中某個頂點
操作結果:對v賦值value
6 FirstAdjVex(G, v);
初始條件:圖G存在,v是G中某個頂點
操作結果:返回v的第一個鄰接頂點。若頂點在G中沒有鄰接頂點,則返回“空”。
7 NextAdjVex(G, v, w);
初始條件:圖G存在,v是G中某個頂點,w是v的鄰接頂點。
操作結果:返回v的(相對於w的)下一個鄰接頂點。若w是v的最後一個鄰接點,則返回“空”。
8 InsertVex(&G, v);
初始條件:圖G存在,v和圖中頂點有相同特徵。
操作結果:在圖G中增添新頂點v
9 DeleteVex(&G, v);
初始條件:圖G存在,v和圖中頂點有相同特徵
操作結果:刪除G中頂點v及相關的弧
10 InsertArc(&G, v, w);
初始條件:圖G存在,v和w是G中兩個頂點。
操作結果:在G中增添弧<v,w>,若G是無向的,則還增添對稱弧<w,v>
11 DeleteArc(&G, v, w);
初始條件:圖G存在,v和w是G中兩個頂點。
操作結果:在G中刪除弧<v,w>,若G是無向的,則還刪除對稱弧<w,v>
12 DFSTraverse(G, v, Visit( ));
初始條件:圖G存在,v是G中某個頂點,Visit是頂點的應用函式。
操作結果:從頂點v起深度優先遍歷圖G,對每個頂點呼叫函式Visit一次且僅一次。一旦visit( )失敗,則操作失敗
13 BFSTraverse(G, v, Visit( ));
初始條件:圖G存在,v是G中某個頂點,Visit是頂點的應用函式。
操作結果:從頂點v起廣度優先遍歷圖G,對每個頂點呼叫函式Visit一次且一次。一旦visit( )失敗,則操作失敗

子圖

  • 設有兩個圖G =(V,E)G1 =(V1,E1),若V1∈V,
    E1 ∈ E,則稱 G1是G的子圖;

編輯器打不出集合包含符號,先用∈代替

常見的圖

  • 1.有向完全圖
    n個頂點的有向圖最大邊數是n(n-1)
  • 2.完全圖
    n個頂點的無向圖最大邊數是n(n-1)/2
  • 3.稀疏圖/稠密圖
    邊數少為前者,多為後者
  • 4.權
    與圖的邊或弧相關的數為權
  • 5.網
    帶權的圖

頂點的度

  • 無向圖中,
    頂點的度為與每個頂點相連的邊數
  • 有向圖中,
    頂點的度分成入度與出度
    • 入度:以該頂點為頭的弧的數目
      • 出度:以該頂點為尾的弧的數目

鄰接點

  • 對於無向圖G=(V,{E}),如果邊 (v,v’)∈E,則稱頂點v和v’互為鄰接點(Adjacent)
    ,即v和v’相鄰接。邊(v,v’) 依附(Incident) 於頂點v和v’或者說 (v,v‘)和頂點v和v'相關聯
  • 對於有向圖G=(V,{A})),如果弧<v,v’>∈A,則稱頂點v鄰接到頂點v’,頂點v’鄰接自頂點v,弧<v,v’>和頂點v,v’相關聯**。

路徑

兩個頂點之間的頂點序列,該序列的每個頂點與其前驅是鄰接點,每個頂點與其後繼也是鄰接點

  • 路徑長度——沿路徑邊的數目或沿路徑各邊權值之和
  • 迴路——第一個頂點和最後一個頂點相同的路徑叫~
  • 簡單路徑——序列中頂點不重複出現的路徑叫~
  • 簡單迴路——除了第一個頂點和最後一個頂點外,其餘頂點不重複出現的迴路叫~

連通圖(強連通圖)

  • 無向圖中,若任意兩點都存在路徑,此圖是連通圖。
  • 有向圖中,若任意兩點都存在互通路徑,此圖是強連通圖。

連通分量

無向圖G的極大連通子圖成為G的連通分量。

極大連通子圖:該子圖是G連通子圖,將G的任何不在該子圖中的頂點加入,子圖不再連通。

強連通分量

有向圖D的極大強連通子圖成為D的強連通分量。

極大強連通子圖意思是:該子圖是D強連通子圖,將D的任何不在該子圖中的頂點加入,子圖不再是強連通的。

  • 下面總結了如何判斷連通子圖是不是極大或極小連通子圖。
    (這個問題好像在離散數學提到過)

若在一個連通子圖中,包含了與其中頂點有關所有邊(the more the better),則是極大連通子圖;若只包含了必不可少的邊(the less the better),那就是極小連通子圖。

關於此概念,下面的博文講的很好,上面的總結也是受教於這位博主。
原文連結:https://blog.csdn.net/merlyn_yang/article/details/82467980

版權宣告:本文為CSDN博主「merlyn_yang」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連結及本宣告。

生成樹

  • 包含無向圖G所有頂點的的極小連通子圖稱為G生成樹。
    它含有圖中全部頂點,但只有足以構成一棵樹的n-1條邊。一棵有n個頂點的生成樹有且僅有n-1條邊。