求最小生成樹現在我所學到的有兩種演算法:kruskal演算法以及prim演算法。
kruskal演算法
這個演算法實際上就是加邊法,每次選擇最小的邊加入集合(加入的邊不能構成迴路),直到把所有的節點都找到為止。
#include
#include
#include
using
namespace std;
const
int maxsize=
100;
struct node
;int
find
(int parent,
int nodes)
//找到nodes的根節點
bool
cmp(node a,node b)
//對node進行自定義排序
intmain()
}int s=-1
;for
(int i=
1;i)//初始化看看有多少邊}}
sort
(edge,edge+s+
1,cmp)
;//排序
int couns=0;
//統計已經遍歷的節點
for(
int i=
0;i<=s;i++)}
}}
prim演算法
**如下:
#include
#include
#include
using
namespace std;
const
int maxsize=
100;
const
int max=
100000
;int
getmin
(int lowcast,
int v,
int visi)
//找到從始節點到其他節點最小的那個權值返回,但是終點不能為已經訪問過的點
}return mis;
}void
prim
(int rode[maxsize]
[maxsize]
,int v)
for(
int i=
1;i}}
intmain()
}for
(int i=
0;i}prim
(rode,v)
;}
prim求最小生成樹
劉陽小同學的筆記 include include include include include include include include include include include using namespace std define mem a,b memset a,b,sizeof ...
kruskal求最小生成樹
kruskal求最小生成樹 include include using namespace std const int n 100010 int p n struct edge edges n int find int x int main sort edges,edges m for int i ...
Prim演算法求最小生成樹
本文參考 google 資料結構 c語言 prim演算法,求最小生成樹 include include 最小生成樹prim define max 65535 using namespace std struct graph int prim graph g flag 0 1 將0號結點加入集合s i...