普利姆算法——c

// 普利姆算法.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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值