好用的链式前向星
對于某一個圖,我們存儲它的方式有很多種,其中常用的有
1、鄰接矩陣(建圖簡單,使用簡單,但是遍歷圖時間復雜度太大)
2、鄰接表(建圖較復雜,對于特殊的米字圖時間復雜度太大)
3、優化的鄰接表,在我前面一片文章里有介紹,就是為每一個節點保存一個LAST數組(最后的點編號),可以極大提高建圖速度
http://blog.csdn.net/cnyali/article/details/41634609
4、鏈式前向星,只是保存邊,構圖簡單,使用簡單,時間復雜度只與邊有關。
先來看下圖
如上一個簡單無向圖,Y表示某條邊的后點,X表示某條邊的前點,BEGIN數組表示每個點所關聯點的開始編號
建圖程序如下
void add(int x,int y) {to[++e]=y;next[e]=begin[x];begin[x]=e; } ...................................................... for(int i=1;i<n;i++){scanf("%d%d",&x,&y);add(x,y);add(y,x);}to[]數組記錄某條邊的后點,next[]將與某個前點所有關聯的后點連接起來,begin[]記錄每個前點的起始編號,以便從后往前搜索所有關聯點
遍歷圖程序如下
for(int i=1;i<=n;i++)for(int j=begin[i];j;j=next[j]){調用連接點的編號用to[j]數組}以上即為鏈式前向星的構圖和使用方法,希望對你有所幫助,如果還有不懂,親自來問我。
轉載于:https://www.cnblogs.com/cnyali/p/4163901.html
總結
- 上一篇: Oracle备份恢复之逻辑备份
- 下一篇: ready与load的区别