通過我的理解我覺得鏈式前向星就是一種用鄰接表存圖的方式,我們知道資料結構中向鄰接表中插入元素有兩種方式尾插法和頭插法.如果我們用stl中vector模擬鄰接表的話,當我們插入元素的時候,很顯然它是用尾插法插入的元素.今天我就來說一下用頭插法來實現插入,也就是上面所說的鏈式前向星.使用陣列的方式來實現鄰接表,並且向鄰接表插入邊(使用頭插法).過程見下方模擬的.
用鏈式前向星來實現最短路
#include
#include
#include
#include
#include
using namespace std;
typedef
long
long ll;
typedef pair<
int,
int>p;
const
int inf=
0x3f3f3f3f
;const
int max_n=
2e3+10;
int dis[max_n]
,head[max_n]
;int cnt;
struct edgeedge[
2*max_n]
;priority_queue
,greater
>q;
void
add(
int u,
int v,
int w)
intmain()
memset
(dis,inf,
sizeof
(dis));
dis[1]
=0; q.
push(p
(0,1
));while
(!q.
empty()
)}}printf
("%d\n"
,dis[n]);
return0;
}
void
add(
int from,
int to,
int cost)
ll dijkstra
(int n)}}
ll ans=0;
for(
int i=
1;i<=n;i++
)return ans;
}
鄰接表 鏈式前向星
鏈式前向星 適合點多 邊少的情況 不適用於大量遍歷出邊的題目 因為cache miss 鄰接表 如果用鄰接表來實現的話,一般就用vector嘛,我們都知道vector都是自動擴容的,在空間滿了以後,就自動申請多一倍空間。對於這樣一張有向圖 輸入邊的順序如下 1 2 2 3 3 4 1 3 4 1 1...
鄰接表之鏈式前向星
鏈式前向星比vector鄰接表在記憶體效能和時間效能上更好。鏈式前向星用法詳見以下模板 includeusing namespace std const int maxn 1e3 10 最大點數 const int maxm 1e6 10 最大邊數 struct nodeedge maxm 邊集,t...
前向星和鏈式前向星
我們首先來看一下什麼是前向星.前向星是一種特殊的邊集陣列,我們把邊集陣列中的每一條邊按照起點從小到大排序,如果起點相同就按照終點從小到大排序,並記錄下以某個點為起點的所有邊在陣列中的起始位置和儲存長度,那麼前向星就構造好了.用len i 來記錄所有以i為起點的邊在陣列中的儲存長度.用head i 記...