鏈式前向星

2021-08-21 22:23:49 字數 830 閱讀 8953

我們在圖論題目的**編寫中一般會涉及到圖的儲存問題,通常的存圖的方法是鄰接矩陣和鄰接鍊錶,這兩者比較簡單,不做過多介紹。不過,這兩者乙個當面對稀疏圖時佔的記憶體過大,乙個因為是鍊錶操作又太慢,而且鍊錶的節點比矩陣的節點佔記憶體大,節點一多一樣很佔空間,這兩者都不是那種比較理想的存圖方式,而鏈式前向星綜合了他們的優點,很好的解決了這些問題。不得不說,思路是相當巧妙的。

鏈式前向星是一種特殊的邊集,從前向星改進而來,前向星中:每乙個點的邊按一定順序排列,而不同點的邊又先按點序號排序。用乙個head陣列表示該點的第一條邊,每條邊有乙個next指標指向下一條邊,當next為-1時表示此邊為該點的最後一條邊。

不過這樣就就涉及到了排序操作,會浪費時間,於是我們設計出了下面的方式:

void addedge(int

from, int end, int val)

head是即時更新的,這樣會導致head其實是每個點的最後一條邊,遍歷時順序是反著的,不過一般不影響圖論的各種演算法的結果。

完整**如下:

int cnt = 0;

int head[n];

struct edge

edge(int

to, int nxt, int

val): to(to), nxt(nxt), val(val) {}

};edge edge[n*n];

void addedge(int from, int end, int

val)

void init()

如果講的不清楚,請通過傳送門看這一篇部落格。

傳送門:

前向星和鏈式前向星

我們首先來看一下什麼是前向星.前向星是一種特殊的邊集陣列,我們把邊集陣列中的每一條邊按照起點從小到大排序,如果起點相同就按照終點從小到大排序,並記錄下以某個點為起點的所有邊在陣列中的起始位置和儲存長度,那麼前向星就構造好了.用len i 來記錄所有以i為起點的邊在陣列中的儲存長度.用head i 記...

前向星和鏈式前向星

前向星 前向星是一種特殊的邊集陣列,我們把邊集陣列中的每一條邊按照起點從小到大排序,如果起點相同就按照終點從小到大排序,並記錄下以某個點為起點的所有邊在陣列中的起始位置。鏈式前向星 鏈式前向星其實就是靜態建立的鄰接表,時間效率為o m 空間效率也為o m 遍歷效率也為o m next表示當前結點的下...

前向星和鏈式前向星

1 前向星 前向星是以儲存邊的方式來儲存圖,先將邊讀入並儲存在連續的陣列中,然後按照邊的起點進行排序,這樣陣列中起點相等的邊就能夠在陣列中進行連續訪問了。它的優點是實現簡單,容易理解,缺點是需要在所有邊都讀入完畢的情況下對所有邊進行一次排序,帶來了時間開銷,實用性也較差,只適合離線演算法。圖一 2 ...