#include <stdio.h>
#include <stdlib.h>
#define MaxVertexNum 100
#define Infiniate 65535
typedef bool VertexType;
typedef int EdgeType;
typedef struct {
VertexType Vex[MaxVertexNum] = {false};
EdgeType Edge[MaxVertexNum][MaxVertexNum] = {Infiniate};
int vexnum, arcnum;
}MGraph;
typedef struct {
int start;
int end;
int weight;
}EdgeArray;
void InitPrim(MGraph *m, int number);
void MSTPrim(MGraph *m, int number, int start);
int main()
{
MGraph m;
int number, start;
printf("Please input the Vertex number: ");
scanf("%d", &number);
printf("Please input the starting Vertex");
scanf("%d", &start);
InitPrim(&m, number);
MSTPrim(&m, number, start);
}
void InitPrim(MGraph *m, int number) {
printf("please input the whole graph, infiniate(65535) is not connected\n");
int isExist;
for (int i = 0; i < number; i++) {
m->Vex[i] = i;
for (int j = 0; j < number; j++) {
scanf("%d", &isExist);
m->Edge[i][j] = isExist;
}
}
}
void MSTPrim(MGraph *m, int number, int start) {
bool *mstSet = (bool *)malloc(sizeof(int)*number); //已访问的MST的顶点
int *weight = (int *)malloc(sizeof(int)*number); //权值数组
int *parent = (int *)malloc(sizeof(int)*number); // 前驱数组
for (int i = 0; i < number; i++) {
*(mstSet + i) = false;
*(weight + i) = m->Edge[start][i];
*(parent + i) = start;
}
*(mstSet + start) = true;
for (int i = 0; i < number-1; i++) {
int min = Infiniate;
int k = 0;
for (int j = 0; j < number; j++) {
if (!*(mstSet + j) && *(weight + j) < min) {
min = *(weight + j);
k = j;
}
}
printf("%d --> %d %d\n", *(parent + k), k, min);
*(mstSet + k) = true;
for (int i = 0; i < number; i++) {
if (!*(mstSet + i) && m->Edge[k][i] < *(weight + i)) {
*(weight + i) = m->Edge[k][i];
*(parent + i) = k;
}
}
}
}
/*
时间复杂度:O(n^2)
6
2
0 6 1 5 65535 65535
6 0 5 65535 3 65535
1 5 0 5 6 4
5 65535 5 0 65535 2
65535 3 6 65535 0 6
65535 65535 4 2 6 0
结果:
2 --> 0 1
2 --> 5 4
5 --> 3 2
2 --> 1 5
1 --> 4 3
*/
Prim_MST_Algorithm
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 该文章为Princeton-Algorithms Part I读书笔记,相关视频在此。 1. Order-of-G...
- The all-pairs shortest-paths problem (APSP) is to find a ...
- 晚上看了这篇论文,是由刘师兄最近发表的,创新之处在于将 结构张量 与 NSST(非下采样剪切波变换)融合在一起构造...
- 心灵与肉体:个体心理学是以心灵及肉体间的动态关系为研究对象的。 一个人从呱呱坠地到生命结束,肉体和心灵的合作都是持...
- 忙碌且快节奏的生活,很多生活在都市中的人都已经习惯把美食作为缓解工作压力的一种方式。但大环境的恶化,高温长时间烹饪...