// 普利姆算法.cpp: 定义控制台应用程序的入口点。
// 陈鹏
#include "stdafx.h"
#include "stdio.h"
#define MAX 1000
int arr[9][9] = {
{ 0 ,10 ,MAX,MAX,MAX,11 ,MAX,MAX,MAX },
{ 10 ,0 ,18 ,MAX,MAX,MAX,16 ,MAX,12 },
{ MAX,18 ,0 ,22 ,MAX,MAX,MAX,MAX,8 },
{ MAX,MAX,22 ,0 ,20 ,MAX,MAX,16 ,21 },
{ MAX,MAX,MAX,20 ,0 ,26 ,MAX,7 ,MAX },
{ 11 ,MAX,MAX,MAX,26 ,0 ,17 ,MAX,MAX },
{ MAX,16 ,MAX,MAX,MAX,17 ,0 ,19 ,MAX },
{ MAX,MAX,MAX,16 ,7 ,MAX,19 ,0 ,MAX },
{ MAX,12 ,8 ,21 ,MAX,MAX,MAX,MAX,0 }
};
int lenght = 9+1;
void MiniTree() {
int min,k;
int XiaBiao[9];
int QuanZhi[9];
XiaBiao[0] = 0;
QuanZhi[0] = 0;
//初始化
for (int i = 0; i < lenght-1; i++) {
QuanZhi[i] = arr[0][i]; //{ 0 ,10 ,MAX,MAX,MAX,11 ,MAX,MAX,MAX },
XiaBiao[i] = 0; //{ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0}
}
//构造
for (int i = 1; i < lenght - 1; i++) { //0的在初始化时候用了
min = MAX;
k = 0;
//遍历全部顶点
for (int j = 1; j < lenght - 1; j++) {
if (QuanZhi[j] != 0&&QuanZhi[j] < min) {//找出权值最小的
min = QuanZhi[j];
k = j;//将最小的权值下标放入k等下用
}
}
printf("<%d , %d>\n", XiaBiao[k], k);
QuanZhi[k] = 0;//将当前的顶点权值设置为0 表示完成任务 进行下一个顶点的遍历
for (int j = 1; j < lenght - 1; j++) {//遍历第k行的全部顶点(下一行)
if (QuanZhi != 0&&arr[k][j] < QuanZhi[j]) {
QuanZhi[j] = arr[k][j]; //{ 0 ,0 ,18 ,MAX,MAX,11 ,16 ,MAX,12 },
XiaBiao[j] = k; //{ 0 ,0 ,1 ,0 ,0 ,0 ,1 ,0 ,1 }
}
}
}
}
int main()
{
MiniTree();
return 0;
}
普利姆算法——c
最新推荐文章于 2024-06-23 15:37:17 发布