第一種:
//求最小生成樹,普里姆演算法(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...