看了將近一周多,終於把鄰接表陣列看懂了;為什麼要學習這種雞肋的東西呢?因為鄰接表和鄰接表矩陣的空間複雜度小(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...