【算法导论】最小生成树之Prime法

简介:         关于最小生成树的概念,在前一篇文章中已经讲到,就不在赘述了。下面介绍Prime算法:         其基本思想为:从一个顶点出发,选择由该顶点出发的最小权值边,并将该边的另一个顶点包含进来,然后找出由这两个顶点出发的最小边,依此类推,直至包含所有的顶点。

        关于最小生成树的概念,在前一篇文章中已经讲到,就不在赘述了。下面介绍Prime算法:

        其基本思想为:从一个顶点出发,选择由该顶点出发的最小权值边,并将该边的另一个顶点包含进来,然后找出由这两个顶点出发的最小边,依此类推,直至包含所有的顶点。如果期间构成环,就舍弃该边,继续寻找最小边。下面以具体实例来说明算法的过程:


具体的程序实现如下:

#include<stdio.h>

#define N 6 //顶点数
#define MAX 10000
typedef struct
{
	int startvex,endvex;//边的起点和终点2
	int length;//边的权值
}edge;

int flag[N]={0};//标志顶点是否被选定
int flag1=0;//记录边的终点
int flag2=0;//记录边的起点


void Prime(int  i,int dist[N][N],edge T[N-1])
{
	int j,k,min;
	int num=0;
	flag[i]=1;//包含顶点置为1
	while(num<5)//6个顶点则有5条边
	{
		min=MAX;
		for(j=0;j<N;j++)//从已选边中找到最小权值的边
		{
			if(flag[j]==1)
				for(k=0;k<N;k++)
				{
					if(dist[j][k]<min)
					{
						min=dist[j][k];
						flag1=k;//记录当前最小权值边的起点和终点
						flag2=j;
					}
				}
		}
		
		if(flag[flag1]!=1)//判断是否构成回路
		{
			T[num].startvex=flag2;//将找到的最小权值边记录
			T[num].endvex=flag1;
			T[num].length=dist[flag2][flag1];
			num++;
			flag[flag1]=1;
		}
		dist[flag2][flag1]=MAX;//将已经选择的边的权值置为无穷大
	}
	for(int i=0;i<N-1;i++)
		printf("start=%d,end=%d,length=%d\n",T[i].startvex,T[i].endvex,T[i].length);
}


void main()
{
	int dist[N][N]={{MAX,10,MAX,MAX,19,21},
					{10,MAX,5,6,MAX,11},
					{MAX,5,MAX,6,MAX,MAX},
					{MAX,6,6,MAX,18,14},
					{19,MAX,MAX,18,MAX,33},
					{21,11,MAX,14,33,MAX}};
	edge T[N-1];
	Prime(1,dist,T);//1代表从序号为一的顶点开始
}

运行结果如下:



注意最小生成树不是唯一的,但是总权值是一样的。



注:如果程序出错,可能是使用的开发平台版本不同,请点击如下链接: 解释说明


原文:http://blog.csdn.net/tengweitw/article/details/17421329

作者:nineheadedbird


目录
相关文章
|
7月前
|
算法 索引
class061 最小生成树【算法】
class061 最小生成树【算法】
86 0
|
2月前
|
算法 决策智能
基于prim算法求出网络最小生成树实现网络社团划分和规划
该程序使用MATLAB 2022a版实现路线规划,通过排序节点权值并运用Prim算法生成最小生成树完成网络规划。程序基于TSP问题,采用遗传算法与粒子群优化算法进行路径优化。遗传算法通过编码、选择、交叉及变异操作迭代寻优;粒子群优化算法则通过模拟鸟群觅食行为,更新粒子速度和位置以寻找最优解。
|
5月前
|
存储 传感器 算法
|
6月前
|
算法 Java
Java数据结构与算法:贪心算法之最小生成树
Java数据结构与算法:贪心算法之最小生成树
|
6月前
|
算法 C语言
数据结构与算法——最小生成树问题(什么是最小生成树、Prim算法、Kruskal算法)
数据结构与算法——最小生成树问题(什么是最小生成树、Prim算法、Kruskal算法)
35 0
|
7月前
|
存储 机器学习/深度学习 算法
上机实验三 图的最小生成树算法设计 西安石油大学数据结构
上机实验三 图的最小生成树算法设计 西安石油大学数据结构
91 1
|
7月前
|
人工智能 算法
一些算法的复习(最短路径、最小生成树、dp)
一些算法的复习(最短路径、最小生成树、dp)
|
7月前
|
算法
最小生成树算法
最小生成树算法
|
7月前
|
算法 Java C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-6 算法训练 安慰奶牛 最小生成树
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-6 算法训练 安慰奶牛 最小生成树
48 0
|
算法 C++
用prim和kruskal算法求最小生成树问题
用prim和kruskal算法求最小生成树问题
86 0