鏈式前向星(聽都沒聽過)

2021-08-07 07:44:07 字數 1533 閱讀 1633

今天終於學會了匈牙利演算法,手撕**的時候卻出了問題,難受。鏈式前向星這種東西大家怎麼都知道,就我菜的不知道,更難受了。

從大佬的部落格學到了

鏈式前向星是一種儲存圖的方法。如果你需要乙個有序的邊序列,如果排序的話用快拍o(nlogn),而鏈式前向星可以避免這種排序。但是資料規模較小時速度比不上鄰接矩陣。

如果說鄰接表是不好寫但效率好,鄰接矩陣是好寫但效率低的話,前向星。前向星固然好些,但效率並不高。而在優化為鏈式前向星後,效率也得到了較大的提公升。雖然說,世界上對鏈式前向星的使用並不是很廣泛,但在不願意寫複雜的鄰接表的情況下,鏈式前向星也是乙個很優秀的資料結構。

具體資料結構:

鏈式前向星最強的地方在於head陣列和nxt;

struct edge

e[maxn];

其中edge[i].to表示第i條邊的終點,edge[i].next表示與第i條邊同起點的下一條邊的儲存位置,edge[i].w為邊權值.

另外還有乙個陣列head,它是用來表示以i為起點的第一條邊儲存的位置,實際上你會發現這裡的第一條邊儲存的位置其實

在以i為起點的所有邊的最後輸入的那個編號.

head陣列一般初始化為-1

新增變得操作

void add(int u,int v,int w)//新增單向邊

遍歷以u為起點的所有邊:

for(int i=head[u];~i;i=edge[i].nxt)

其實就是剛開始想不太明白,模擬一遍就很簡單了。什麼?

你懶得弄?

那就跟我來吧!

數學序號代表新增順序

首先把陣列什麼的初始化;

新增第一條邊:

新增第二條邊:

新增第三條邊:

新增第四條邊

新增第五條邊:

新增第六條邊:

現在就顯而易見了,head[i]存的是上一條以i為起點的邊在edge陣列中的位置。

前向星和鏈式前向星

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

前向星和鏈式前向星

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

前向星和鏈式前向星

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