鄰接表陣列 用5個陣列表示鄰接表

2021-10-13 07:16:55 字數 1232 閱讀 2211

看了將近一周多,終於把鄰接表陣列看懂了;為什麼要學習這種雞肋的東西呢?因為鄰接表和鄰接表矩陣的空間複雜度小(o(m)),而鄰接矩陣空間複雜度o(n*n)很容易爆棧,1438: 藍橋杯 2023年第四屆真題大臣的旅費比如說這一題,鄰接矩陣妥妥的爆棧,必須用鄰接表或鄰接表陣列(1<=n<=1e+5)

思路沒什麼難處,就是點繞;只要邏輯捋清了,就沒什麼難點了;(蒻羈的我這個彎兒繞了一周多)

#include

.h>

using namespace std;

const int n

=1e+3

;int u[n]

,v[n

],w[n]

;int first[n]

;//頂點(相當於鄰接表的表頭)

int next[n]

;//邊資訊(與表頭鄰接的點,所構成的邊)

int book[n]

;//標記陣列

void

fun(int x,int num)

//x,頂點編號 ,num, 邊的編號

/*4 5

1 4 9

4 3 8

1 2 5

2 4 6

1 3 7

*/void

dfs(int x)

//深度遍歷

t=next[t];}

}void

bfs(int x)

//廣度遍歷

; int r=

0,f=0;

q[r++

]=x;

book[x]=1

;printf

("[%d]"

,x);

while

(f!=r)

t=next[t];}

}}int main()

book[1]

=1;printf

("[%d]",1

);dfs(1)

;//源點為1,深度遍歷

cout<

bfs(1)

;//源點為1,廣度遍歷

cout<

for(int i=

1;i<=n;i++

)//列印鄰接表陣列結構

用陣列模擬鄰接表

struct edge edge max 3 1 一定要邊的範圍 int head max 頭節點 void init 初始化資訊,1 插入邊void insert int u,int v,int64 len 遍歷 for int i head top i 1 i edge i next 然後看題意...

ACM 用陣列模擬鄰接表

為了學最短路而補。用圖的鄰接矩陣儲存法,它的空間和時間複雜度都是n2,現在我來介紹另外一種儲存圖的方法 鄰接表,這樣空間和時間複雜度就都是m。對於稀疏圖來說,m要遠遠小於n2。先上資料,如下。第一行兩個整數n m。n表示頂點個數 頂點編號為1 n m表示邊的條數。接下來m行表示,每行有3個數x y ...

陣列實現鄰接表

之前我們介紹過圖的鄰接矩陣儲存法,它的空間和時間複雜度都是n 2,現在我來介紹另外一種儲存圖的方法 鄰接表,這樣空間和時間複雜度就都是m。對於稀疏圖來說,m要遠遠小於n 2。先上資料,如下 第一行兩個整數n m。n表示頂點個數 頂點編號為1 n m表示邊的條數。接下來m行表示,每行有3個數x y z...