有向图的邻接表描述 c++
有向圖的鄰接表表示法
圖的鄰接表表示法類似于樹的孩子鏈表表示法。對于圖G中的每個頂點vi,該方法把所有鄰接于vi的頂點vj鏈成一個帶頭結點的單鏈表,這個單鏈表就稱為頂點vi的鄰接表(Adjacency List)。
1. 鄰接表的結點結構
(1)表結點結構
? ??┌────┬───┐?
? ??│adjvex??│next??│
? ? └────┴───┘
? ? 鄰接表中每個表結點均有兩個域:
① 鄰接點域adjvex
存放與vi相鄰接的頂點vj的序號j。
② 鏈域next
將鄰接表的所有表結點鏈在一起。
??注意:
? ? 若要表示邊上的信息(如權值),則在表結點中還應增加一個數據域。
(2)頭結點結構
? ??┌────┬─────┐?
? ??│vertex??│firstedge │
? ? └────┴─────┘
? ? 頂點vi鄰接表的頭結點包含兩個域:
① 頂點域vertex
存放頂點vi的信息
② 指針域firstedge
vi的鄰接表的頭指針。
??注意:
? ? ① 為了便于隨機訪問任一頂點的鄰接表,將所有頭結點順序存儲在一個向量中就構成了圖的鄰接表表示。
? ? ② 有時希望增加對圖的頂點數及邊數等屬性的描述,可將鄰接表和這些屬性放在一起來描述圖的存儲結構。
2.代碼實例
輸出結果為:
3.代碼實例2(ps:補充于2011-6-14)
? ? ? 總體而言,鄰接表表示法中主要含有兩種結點,分別是頭結點和表結點(也叫做邊結點),在頭結點(s)到表結點(d)之間存在著一條邊。如果頭結點后面有多個表結點,即s->d1->d2,則表示存在著兩條邊,分別是e(s,d1)和e(s,d2)。鄰接表表示法中,頭結點的數量是固定的,就是圖中的頂點數量V,表結點的數量由邊的數量來決定。如果是有向圖,表結點的數量=邊的數量;如果是無向圖,則表結點的數量=邊的數量*2。
? ? ? 在構造圖的時候,如果一個頭結點后面有多個表結點,那么表結點按次序添加在頭結點后面。比如原先有結構s->d1->d2,現在需要添加表結點d3,那么需要打斷s->d1的指針,讓d3指向d1,s指向d3。即s->d3->d1->d2。
總結
以上是生活随笔為你收集整理的有向图的邻接表描述 c++的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CDH、CM下载403,Cloudera
- 下一篇: s3c2440移植MQTT