數(shù)據(jù)結(jié)構(gòu)筆記1-圖-1【17.01.23】

1. 圖的定義

1.1 各種圖

圖由頂點(diǎn)的有窮非空集合和頂點(diǎn)之間邊的集合組成,記為G(V,E),其中G表示圖,V是G圖中頂點(diǎn)的集合,E是G圖中邊的集合。

  • 無向邊:用無需偶對(Vi,Vj)表示
  • 有向邊:也稱為弧,<Vi,Vj>表示,Vi為弧頭(head)。主要順序不能寫錯
  • 無頂點(diǎn)到自身的邊和重邊的圖稱為簡單圖(無向圖中任意頂點(diǎn)間都有邊的簡單圖為完全簡單圖,n個頂點(diǎn)有n*(n-1)/2條邊
  • 有向完全圖,n個頂點(diǎn),n*(n-1)條邊
  • 帶權(quán)(weight)的圖成為網(wǎng)(network)

1.2 頂點(diǎn)與邊

無向圖中被邊相連的頂點(diǎn)互為鄰接點(diǎn)(adjacent),這條邊依附(incident)與這兩個頂點(diǎn)。
頂點(diǎn)的度數(shù):略。圖的邊數(shù)為全部頂點(diǎn)度數(shù)和的一半
有向圖分出度和入度。邊數(shù)=出度和=入度和
路徑
路徑的長度
路徑的首尾相接->回路/環(huán)(cycle)

  • 頂點(diǎn)不重復(fù)的路徑->簡單路徑
  • 除首尾頂點(diǎn)外無重復(fù)頂點(diǎn)的回路->簡單回路

1.3 連通圖

無向圖的的極大連通子圖稱為連通分量

  • 子圖
  • 子圖是連通的
  • 連通子圖含有極大頂點(diǎn)數(shù)
  • 具有極大頂點(diǎn)數(shù)的連通子圖包含依附于這些頂點(diǎn)的所有邊
    有向圖雙向連通->強(qiáng)連通
    無向圖中連通且n個頂點(diǎn)n-1條邊叫生成樹
    有向圖:有向樹,若干顆有向樹構(gòu)成生成森林

2. 抽象數(shù)據(jù)類型

3. 存儲結(jié)構(gòu)

3.1 鄰接矩陣

  • 一維數(shù)組存儲圖中頂點(diǎn)信息
  • 二位數(shù)組(鄰接矩陣)存儲邊/弧的信息
  • 求Vi的所有鄰接點(diǎn)只需將矩陣的第i行元素掃描一遍,為1的為鄰接點(diǎn)
  • 無向圖的鄰接矩陣為對稱陣
  • 網(wǎng)的權(quán)值表示法
  • 用權(quán)值代替1
  • 無連接的為“無窮”
  • 主對角線為0

代碼實(shí)現(xiàn)

typedef char VertexType;                                  
typedef int Endg Type;                                      
#define MAXVEX 100                                       
#define INFINITY 65535                                   
typedf struct
{
    VertexType vexs [MAXVEX];                                          
    EdgeType arc [MAXVEX] [MAXVEX];           
    int numVertexes, numEdges;                        
} MGraph;

鄰接矩陣?yán)速M(fèi)空間,優(yōu)化:鄰接表

3.2 十字鏈表

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容