C 實現最小生成樹

2021-08-13 20:38:14 字數 1161 閱讀 6404

第一種:

//求最小生成樹,普里姆演算法(prim)

//先給定乙個初始點,然後找到離它最近的點,並加入找的點序列,將其對應的距離設為0

//然後找其它頂點距離新的找到點集合最小的點,再加入找到的點序列

//重複以上過程

public static void prim_minitree(graph g)

console.writeline(label_checked[0].tostring() + " 0 0");

//迴圈找其他點的最短距離

int sum = 0;

for (int i = 1; i < g.nums; i++)

}//列印節點

sum += min;

console.writeline(label_checked[k].tostring()+" "+k.tostring()+" "+min.tostring());

lowest_length[k] = 0;//代表這個點已經找到了

//再次迴圈,更新其他點到已經找到點距離

for (int j = 1; j < g.nums;j++ )}}

console.writeline("\n最小生成樹的最短距離為:"+sum.tostring());

}第二種:克魯斯卡爾演算法:

1.將鄰接矩陣初始化為;起點、終點、邊的型別,並且將其按照邊的由小到大的順序排序;

2.初始化乙個一維陣列,下邊表示起點,對應值表示終點,並寫乙個用於判斷是否有環的函式,就是根據這個一維陣列,不斷變換起始點,看看是否有環;

3.遍歷邊的集合,滿足時輸出

//返回:起點、終點、權重矩陣

public static int[,] get_metrix(graph g, int nums)}}

//氣泡排序

for (int i = 0; i < 15; i++)}}

return a;

}public static int find_yesorno_circle(int m, int a)

return a;

}//克魯斯卡爾(kruskal)演算法

public static void kruskal(graph g, int nums)

for (int i = 0; i < nums; i++)  //遍歷每一條邊}}

C 最小生成樹

樹是指沒有環路的圖,生成樹就是指乙個圖上面刪除一些邊,使它沒有環路。最小生成樹就是指生成樹中邊權之和最小的那一種。上圖的最小生成樹就是這樣 就以上圖為例 先選擇乙個起始點,我們就以a為例。建立乙個集合s,用來儲存已經在樹中間的點。開始時集合那只有點a,即 s 選擇乙個連通到集合s中乙個點的最小邊,其...

Prim演算法最小生成樹c 實現

標籤 空格分隔 prim 演算法 c 對於給定的帶權圖g,為了使得生成樹t的權w t 最小,我們可以使用貪心演算法。1.選擇乙個初始點v1 2.為了使得生成樹的權極小化,選擇v1 的最小權鄰點,並將其連線到v1 3.選擇的最小權鄰點,如v3 將其連線 4.重複以上步驟,直到所以點都連在一起,得到生成...

c 實現kruskal演算法(最小生成樹)

include using namespace std const int max 15 陣列最大容量 struct edge class graph 定位 int graph locate char ch return i 建構函式 graph graph int v,int e vertex n...