1. 程式人生 > >旭說資料結構之圖的基本知識

旭說資料結構之圖的基本知識

1.圖的定義

較之線性表的1對1結構、樹的1對多結構,圖是多對多的資料結構。
這裡寫圖片描述
圖是由頂點和邊組成的,一個圖中至少有一個頂點(之前我們說樹的時候,允許樹中結點個數為0),所有頂點組成集合V,兩個頂點之間如果相連就產生一條邊,所有的邊組成集合E,我們用G表示一個圖,則G=(V,E)
下面列出圖中的一些概念:

概念 解釋 示意
無向邊 兩個頂點之間的邊沒有方向,兩個頂點可以互相訪問,用(Vi,Vj)表示 這裡寫圖片描述
有向邊 兩個頂點之間的邊有方向,如右圖用<A,B>表示 這裡寫圖片描述
無向圖 圖中每條邊都沒有方向/圖中的邊都是無向邊 這裡寫圖片描述
有向圖 圖中的邊均為有向邊 $12
頂點的度 依附於該頂點的邊的數目 上圖中,B頂點的度為3
頂點入度/出度 針對有向圖而言,出度表示以該頂點為起點的邊的數目,入度表示以該頂點為終點的邊的數目 上圖中,B頂點的入度1,出度為2
無向完全圖 每個頂點之間都有一條無向邊,有N個頂點,就有C2N條邊 這裡寫圖片描述
有向完全圖 每個頂點之間都有兩條互相相反的有向邊,有N個頂點,就有A2N條邊 $1
路徑 如右圖,由頂點A經過一條邊到達B,再由B經過一條邊到達C,則ABC就是A到C的一條路徑,同理ADC也是A、C之間的一條路徑 這裡寫圖片描述
連通 如果兩個頂點之間存在路徑,則這兩個頂點是連通的
連通圖 無向圖中,任意兩個頂點都是連通的,則稱該圖為連通圖,反之則是非連通圖 如上圖就是個連通圖
連通分量 無向圖中,極大連通子圖為該圖的連通分量;注意:是極大而不是最大; 這裡寫圖片描述
強連通圖 有向圖中,任意兩個頂點都是連通的,則稱該有向圖為強連通圖

2.圖的儲存結構

2.1鄰接矩陣

用一個一維陣列來存頂點,用一個二維陣列來儲存邊;
這裡寫圖片描述
1,對於不帶權的圖。不同的兩個頂點之間有邊的話,就設定鄰接矩陣對應位置為1,否則為0;
2,對於帶權的圖。不同的兩個頂點之間有邊的話,就設定鄰接矩陣對應位置為該邊上的權值,否則設為無窮大。

由於無向圖的邊是無向的,所以它的鄰接矩陣為對稱矩陣。
而有向圖的邊是有向的,所以有向圖的鄰接矩陣一般不是對稱矩陣。

2.2鄰接表

假設有n個頂點,則需要一個長度為n的陣列,每個陣列元素存放頂點的值和一個指標,這個指標指向一個連結串列,連結串列中裝的是該頂點的有邊頂點在陣列中的位置,如下圖,
這裡寫圖片描述