图的存储 邻接矩阵+邻接表+链式前向星
生活随笔
收集整理的這篇文章主要介紹了
图的存储 邻接矩阵+邻接表+链式前向星
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
圖的存儲 — 鄰接矩陣
在樹的問題中,鄰接矩陣是空間、時間的極大浪費。 假設樹的結點個數為 N = 100000。
建立鄰接矩陣需要空間為 1e5*1e5 但是由于只有 N - 1 條邊,所以在鄰接矩陣中只有 100000 - 1 個有效 信息。
即只利用了鄰接矩陣的 0.00001%,剩余空間全部被浪費。
圖的存儲 — 鄰接表
鄰接表是最常用存儲結構之一。 但是 vector(動態數組) 的時間效率較低 (較普通數組而言)。
那有沒有一種用普通數組可以存儲, 時間和空間都極佳的存儲結構?
鏈式前向星
鏈式前向星是介于 鄰接矩陣 和 鄰接表 之間比較均衡的一種數據結構
struct edge{int to;//存儲該邊指向的頂點int next;//存儲下一條邊的編號 }edge[maxn]; int head[maxn]; int cnt=0; void add_edge(int u,int v)//建邊,u->v {edge[++cnt].next=head[u];//令next指向前一條邊edge[cnt].to=v;//這條邊的終點為vhead[u]=cnt;//更新head } //建邊 for(int i=0;i<n-1;i++) {scanf("%d%d",&a,&b);add_edge(a,b);add_edge(b,a); } //DFS for(int i=head[x];i!=0;i=edge[i].next){int son=edge[i].to;dfs(son); } const int maxn=1e6+10; struct edge {int to;//這條邊指向的頂點int next;int val; }edge[maxn]; int cnt=0; int head[maxn]; void addEdge(int from,int to,int val) {edge[cnt].to=to;edge[cnt].val=val;edge[cnt].next=head[from];head[from]=cnt++; } void init() {memset(head,-1,sizeof head);cnt=0; }?
總結
以上是生活随笔為你收集整理的图的存储 邻接矩阵+邻接表+链式前向星的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷P3919可持久化线段树
- 下一篇: HDU 2063 过山车 二分图匹配 匈