無向連通網的最小生成樹演算法 第3部分

2021-07-28 06:53:14 字數 2122 閱讀 8141

普利姆演算法的測試資料如下:每行資料表示邊的兩個端點和權值

10 13

1 0 4

2 1 2

3 0 3

4 3 8

5 1 2

5 2 2

5 4 1

6 3 10

7 4 4

8 5 4

8 7 6

9 6 5

9 7 2

普利姆最小生成樹演算法:

/*

描述:普利姆演算法求解最小生成樹

*/#include

#include

#include

#include

#include

#include

#define inf int_max

#define fileinput 1

using

namespace

std;

typedef

struct edgenode

edgenode;

void creatmatrix(int **adjmatrix,int n,int e); //構建無向圖的鄰接矩陣

void printmatrix(int **adjmatrix,int n); //輸出圖的鄰接矩陣

void initedgeset(int **adjmatrix,edgenode *edgeset,int n,int start); //初始化邊集

int chooseedge(edgenode *edgeset,int n,int index); //從候選邊集中選取權重最小的邊

void modfiyedgeset(int **adjmatrix,edgenode *edgeset,int n,int index,int to);//調整候選邊集

void primmst(int **adjmatrix,edgenode *edgeset,int n,int start); //普利姆演算法

void printmst(edgenode *edgeset,int n); //輸出最小生成樹選舉結果

int main()

#if fileinput //條件編譯:輸入重定向到鍵盤(輸入普利姆演算法的起始頂點)

fin.close();

#endif

return0;}

void creatmatrix(int **adjmatrix,int n,int e)

}void printmatrix(int **adjmatrix,int n)

}int chooseedge(edgenode *edgeset,int n,int index)

return minpos;

}void modfiyedgeset(int **adjmatrix,edgenode *edgeset,int n,int index,int to)

}void printmst(edgenode *edgeset,int n)

edgenode;

bool

operator

<(const edgenode &a,const edgenode &b)

void creatmatrix(int **adjmatrix,edgenode *edgeset,int n,int e)

}void printmatrix(int **adjmatrix,int n)

return root;

}int mergeedge(int nodefrom,int nodeto) //邊結點合併到連通圖中

void kruskalmst(edgenode *edgeset,int n,int e)

if(countedge==n-1)

}if(indexcout

<<"mincost: "

}

無向最小生成樹(prim 與krusckal)總結

之前學的時候一直感覺是兩個演算法沒什麼區別,今天總結一下 大體思路 prim演算法是做n次確定每乙個點,使其構成最小生成樹。而相對比的是krusckal演算法是做n 1次,找到n 1條最短邊,以此來確定n個點。假設給定n個點,以及m條邊,既然是無向的,且有可能使其連通,那麼邊數m必定是 n 1 m ...

演算法導論 第23章 最小生成樹

最小生成樹 minimum spanning tree 全稱 最小權值生成樹 在含有n個頂點的連通圖中選擇n 1條邊,構成一棵極小連通子圖,並使該連通子圖中n 1條邊上權值之和達到最小,則稱其為連通網的最小生成樹。有兩種具體的實現演算法 kruskal演算法 prim演算法 兩者都用到了貪心演算法。...

最小生成樹(演算法導論第23章)

下面討論的兩種最小生成樹演算法都是貪心演算法。貪心演算法的每一步必須在多個可能的選擇中選擇一種,貪心演算法選擇在當前看來最好的選擇。通用演算法是每個時刻生長最小生成樹的一條邊 安全邊 並在整個策略的實施過程中,管理乙個遵守下述迴圈不變式的邊集合a 在每遍迴圈之前,a是某棵最小生成樹的子集。gener...