最小二叉樹常常用在找最短路徑、最小花費等題目中。與之相關的演算法有兩種,prim演算法和kruskal演算法,比較常用的是kruskal演算法,而且prim演算法沒怎麼理解清楚,所以就寫記一下kruskal演算法吧。
實現步驟
: (t
表示邊的集合)
1.設t的初試狀態是空集 2.
當t中的邊數小於
n-1條時: a.
從e(g)
中選擇權值最小的邊
(u,v
)並刪除 b.
若(u,v)不和t
中的邊一起構成迴路,則將邊
(u,v)加入
t中典型的題目比較多,這裡就以poj1258為例:
題目大意:tom有n個農場,他要修建公路,是每個農場連線起來(直接或間接),並且要使公路長度之和最小,使花費最少。
**實現:
#include#include#include#include#define maxn 120
using namespace std;
typedef struct node
p;p edge[maxn*maxn];
int vexnum, s[maxn];
bool cmp(node a, node b)
void build()
int find(int k)
void union(int a, int b)
int main()
sort(edge, edge+temp, cmp);//對農場之間的距離排序
int sum = 0, fa, fb;
for(int i = 0; ihdu1683,
hdu1232,
hdu1875
最小二叉堆
最小二叉堆 include include using namespace std 模板函式的實現與宣告要寫在乙個檔案中 template class binaryminheap template binaryminheap binaryminheap template void binarymin...
二叉樹最小深度
最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。遞迴,若為空樹返回0 若左右子樹都為空,則返回 1 若左子樹為空,則返回右子樹的最小深度 1 若右子樹為空,則返回左子樹的最小深度 1 若左右子樹均不為空,則取左 右子樹最小深度的較小值,1 definition for a binary tr...
二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...