樹與圖的存儲
樹是一種特殊的圖,與圖的存儲方式相同。
對于無向圖中的邊ab,存儲兩條有向邊a->b, b->a。
因此我們可以只考慮有向圖的存儲。
(1) 鄰接矩陣:g[a][b] 存儲邊a->b
(2) 鄰接表:
// 對于每個點k,開一個單鏈表,存儲k所有可以走到的點。h[k]存儲這個單鏈表的頭結點
int h[N], e[N], ne[N], idx;// 添加一條邊a->b
void add(int a, int b)
{e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}// 初始化
idx = 0;
memset(h, -1, sizeof h);
樹與圖的遍歷
(1) 深度優先遍歷 —— 模板題 https://www.acwing.com/problem/content/848/
int dfs(int u)
{st[u] = true; // st[u] 表示點u已經被遍歷過for (int i = h[u]; i != -1; i = ne[i]){int j = e[i];if (!st[j])