鄰接表不和鄰接矩陣只和點有若干聯絡,它和點與邊都有密切的聯絡。
鄰接表的實現需要四個東西,乙個是記錄邊資訊的陣列、乙個是表頭、乙個是當前操作邊的序號、乙個是add函式。(當然也少不了初始化函式了)
具體如下。
int which=1;
int head[maxv];
struct edge
}e[maxv];
void add(int s, int d,int w)
void initforgraph()
which表示當前操作的是哪一條邊(是邊的序號)(有些人喜歡用size、用n,其實都是習慣問題了。which到最後輸入結束的時候也是邊的數量)
head是表頭,head表示以2為起點的邊的表。
e陣列是記錄邊資訊的,但是由於鄰接表的特殊性,我們只需要記錄他的終點、權值和下一條邊的序號,而不是像克魯斯卡爾演算法中經典地儲存起點、終點、權值這樣子。
在插入邊表的時候是前叉式,所以**看上去好像是有點繞。
不了解前叉式建表的話建議先去看看鍊錶的插入的幾種方式。
這裡注意下head一定要初始化為-1的。
不了解鄰接表的話,也比較難看懂**,建議學一下資料結構的圖的相關知識。
當然這種實現方式不是使用教科書上的指標的實現方式,而是用陣列模擬的。他們使用起來是一樣的效果。
下面是遍歷方式。
其實使用鄰接表的圖的遍歷方式很像是bfs,由乙個點發散的遍歷他相鄰的點(邊)。
遍歷方式是基於我上面給出的鄰接表的實現方式的。
int main()
for(int i=1;i<=n;i++)
printf("\n");
}}
下面的第一重迴圈是對所有的點進行迴圈,第二重迴圈是對以這個點為起點的所有的邊的迴圈。 Fibonacci數列的一種經典遞迴實現
剛才.net課程期末考試,正好最後一題考的是遞迴實現fibonacci數列.順便就把 打出來發在這裡.雖然沒什麼技術含量 wink 主要特性就是使用buffer將先前已經計算過的fibonacci數列的值儲存下來,減少遞迴時的重複計算開銷.c 沒直接的lazy evaluation,這種採取buff...
經典的一種觀察者模式實現
為你的類class target設計乙個觀察者基類class observer,同時設計乙個觀察者容器 typedef std listobserver list 再為observer設計一系列的虛函式,表示事件處理函式,在某一事件發生時,對容器內的所有觀察者呼叫一次該處理函式。如果在lua裡就會更...
有序鍊錶的合併的一種實現
概述 合併有序鍊錶的一種實現 在leetcode刷題的時候,碰到有序鍊錶的合併問題,第21題是兩個鍊錶的合併,第23提是k個鍊錶的合併,第23題利用第21題的解法,將兩個鍊錶合成乙個,再把合成的鍊錶作為新煉表和下乙個鍊錶合併即可。合併鍊錶有很多方法 a.將所有節點拆開,放到陣列裡進行排序,再放回鍊錶...