/*
prim 鄰接表+優先佇列優化
kruskal 鄰接矩陣+並查級優化,因為kruskal裡沒有需要遍歷鄰接邊的操作,所以簡單的用鄰接矩陣
結果保證:獲得路徑即可
e因為要有生成樹,原圖必須是一條連通的路線,所以e>=n-1
*/#include
#include
#include
using
namespace std;
const
int maxnum =
100;
const
int inf =
0x3f3f3f3f
;typedef
struct adjnode adjnode;
typedef
struct vexnode vexnode;
typedef
struct algraph algraph;
int father[maxnum]
;typedef
struct edge
edge()
//運算子過載
friend
bool
operator
>
(const edge e1,
const edge e2)
}edge;
edge e[maxnum]
;algraph lg;
int vexnums, edgenums;
bool s[maxnum]
;//構建鄰接矩陣
void
createalgraph()
//初始化鄰接表的邊
for(
int i =
0; i < edgenums; i++)}
void
prim1000()
adjnode* an;
s[u]
=true
;//將u頂點加入s集合中
priority_queue
, greater
> queue;
//邊佇列
edge* path =
new edge[vexnums -1]
;//最小生成樹結果
int k =0;
//記錄結果的生成進度
//將u頂點的鄰接邊都加入佇列中
an = lg.vexs[u]
.first;
while
(an !=
null
)for
(int i =
1;queue.
size()
>
0; i++
) an = an-
>next;}}
for(
int i =
0; i < vexnums -
1; i++
) cout << endl;
}int t2 =
gettickcount()
; cout <<
"總計耗時:"
<< t2 - t1 << endl;
}void
createamgraph()
}int
find
(int x)
intmerge
(int a,
int b)
intcmp
(const
void
*a,const
void
*b)void
kruskal1000()
//對邊進行排序
qsort
(e, edgenums,
sizeof
(e[0])
, cmp)
;//o(eloge) 一次排序完成
for(
int i =
0; i < edgenums; i++
)//n-1if(
merge
(e[i]
.u, e[i]
.v)/*logn*/
)//-->n*logn 從小到大
}for
(int i =
0; i < vexnums-
1; i++
) cout << endl;
}int t2 =
gettickcount()
; cout <<
"總計耗時:"
<< t2 - t1 << endl;
}int
main()
測試資料
kruskal比prim快多了,無腦用kruskal算了
mysql redis mongodb效能比較
1 redis所有資料都是放在記憶體中的,持久化是使用rdb方式或者aof方式。2 mongodb的所有資料實際上是存放在硬碟的,所有要操作的資料通過mmap的方式對映到記憶體某個區域內。然後,mongodb就在這塊區域裡面進行資料修改,避免了零碎的硬碟操作。至於mmap上的內容flush到硬碟就是...
Prim演算法和Kruskal演算法
一 prim演算法 prim演算法實現的是找出乙個有權重連通圖中的最小生成樹,即 具有最小權重且連線到所有結點的樹。強調的是樹,樹是沒有迴路的 prim演算法是這樣來做的 首先以乙個結點作為最小生成樹的初始結點,然後以迭代的方式找出與最小生成樹中各結點權重最小邊,並加入到最小生成樹中。加入之後如果產...
Prim演算法和Kruskal演算法
現有村落間道路的統計資料表中,列出了有可能建設成標準公路的若干條道路的成本,求使每個村落都有公路連通所需要的最低成本。輸入資料報括城鎮數目正整數n 1000 和候選道路數目m 3n 隨後的m行對應m條道路,每行給出3個正整數,分別是該條道路直接連通的兩個城鎮的編號以及該道路改建的預算成本。為簡單起見...