算法原理:将图G 中的边按权数从小到大逐条考察,
按不构成圈的原则加入到T中(若有选择时, 不同的选
择可能会导致最后生成树的权数不同), 直到
q(T) = p(G)-1为止, 即 T 的边数 = G 的顶点1 为止.
算法中无圈性的判定比较麻烦,应该用标记法最好,对各个分支的顶点标号。
参考书:2004,《图论及其应用》,科学出版社,孙惠泉 编著。
#include<iostream>
#include<fstream>
#define N 100
using namespace std;
int n;//结点数
int a[N][N] = {0};
bool judgeNode(int flagNodes[N]){//判断是否还有未访问结点
for(int i = 0; i < n; i++)
if(flagNodes[i] == 0) return 1;
return 0;
}
void judgeSub(int flagSub[N], int x, int y){//标记分支
if(flagSub[x] != 0){
if(flagSub[y] == 0) flagSub[y] = flagSub[x];
else{
int min = flagSub[x] < flagSub[y] ? flagSub[x] : flagSub[y];
int max = flagSub[x] + flagSub[y] - min;
for(int i = 0; i < n; i++)
if(flagSub[i] == max)