存图利器——链式前向星
生活随笔
收集整理的這篇文章主要介紹了
存图利器——链式前向星
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
存圖的各種數據結構,復雜如下
鄰接矩陣? ? O(1)(查詢一條邊)? ? ? O(n)枚舉出邊? ? O(N*N)空間復雜度? ?
前向星 O(n)(查詢一條邊)? ? ? O(n)枚舉出邊? ? O(N)空間復雜度? ? (預處理時間復雜度(O(NlgN)))
鏈式前向星 O(n)(查詢一條邊)? ? ?O(n)枚舉出邊? ? ? O(N)空間復雜度
我們發現對于與一道題若n逼近10^6時,前兩者的時間就不行了,而鏈式前向星還可以支撐這種數據規模
那么鏈式前向星究竟是什么呢?
?
對于和結點u有邊連接的v,我們為其分配一個地址,
那么對于u,我們如何查到這個地址呢?
這個問題引入了鏈式前向星中的head數組和next數組,
head[u]表示與結點u有連邊的第一個點的地址id
而next數組更像是一個指針,對于next[id]令其指向下一個和u有連邊的地址
在這個地址上,我們只要存儲和u相連的是哪個點v即可
代碼如下:
procedure add(u,v:longint);//加入一條從u連向v的有向邊 begininc(tot);//分配地址next[tot]:=head[u]; head[u]:=tot; vet[tot]:=v;//鏈表的插入 end;那么我們如何實現dfs呢
procedure dfs(id:longint); var point:longint; beginpoint:=head[id];while point<>0 do //一直找下一個地址begindfs(vet[point]);//深搜point:=next[point];//跳到下一個地址end; end;鏈式前向星就講到這里了
?
轉載于:https://www.cnblogs.com/by-w/p/9816590.html
總結
以上是生活随笔為你收集整理的存图利器——链式前向星的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一张图看懂CSS cascade, sp
- 下一篇: 配置nginx支持php