栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

最小生成树

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

最小生成树

1)包含任务或问题描述和分析

最小生成树其实是最小权重生成树的简称。我们称求取该生成树的问题成为最小生成树问题。一个连通图可能有多个生成树。当图中的边具有权值时,总会有一个生成树的边的权值之和小于或者等于其它生成树的边的权值之和。

2)设计与实现

利用prim算法实现最小生成树,该算法思路与Dijsktra算法大致相同,不过Prim算法的最短是相较于整体而言的,所以我将Dijsktra算法稍作改进得到Prim算法

3)测试例子与结果分析

测试例子:(图片从网上找的,当做例子,非常直观)

 测试结果:

 

 4)带注释的源代码
#include
#include
#define MAX_SIZE 10
#define MAXROAD 999

typedef struct{
	int i;
	int j;
	int weight;
}Node;//记录最小生成树的边和权重 
void Prim(int g[][MAX_SIZE],int num){//num为一开始知道的结点 
   int flag[MAX_SIZE]={0};//标志数组
    flag[num]=1;//将初始结点放入数组
   int i;
   Node tree[MAX_SIZE-1];//边的数量比结点少一 
   for(i=0;i结点%d, 权值为%dn",tree[i].i,tree[i].j,tree[i].weight);
   } 
   }
	
int main()
{
	int Grape[MAX_SIZE][MAX_SIZE]={0};//该图不是有向图,所以要更新为无向图 
	int i,j,num;
	printf("请输入i到j的路径并输入它的长度"); 
	while((scanf("%d%d%d",&i,&j,&num))!=EOF)
	{
		Grape[i][j]=num;
		Grape[j][i]=num;//对称为无向图 
		printf("请输入i到j的路径并输入它的长度"); 
		}	
	for(i=0;i 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/703026.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号