Kruskal算法(不能运行)

/**
 *
 *	Coder: LinX  2017-7-16
 *
 *	内容: 使用Kruskal算法计算无向图的最小生成树 
 *
 *	说明: 此算法复杂度只与图的边数有关,因此适合于稀疏图
 */ 
 
 #include <stdio.h>
 
 #include <stdlib.h>
 
 int enums;
 
 typedef struct
 {
 	
 	int start,end;		//边的两个顶点 
 				
 	int weight;			//边的权值 
 	
 }Road;
  
 int Kruskal(Road road[],int v[]);
 
 int getRoot(int v[],int vt);		
  
 int main()
 {
 	
 	int i,start,end,weight,v[100];
 	
 	Road road[100];
 	
 	printf("输入边的条数: ");
 	
 	scanf("%d",&enums);
 	
	printf("输入边信息(输入一对顶点的位置)及权值: ");
 	
 	/*初始化road数组和并查集*/
 	
 	for(i=0;i<enums;i++)
 	{
 		
 		scanf("%d%d%d",&start,&end,&weight);
 		
 		road[i].start=start;
 		
 		road[i].end=start;
 		
 		road[i].weight=weight;
 		
 		v[i]=i;			//刚开始每个节点都是一棵树 
 		
 	}

 	
 	
 	return 0;
 	
 } 
 
 int Kruskal(Road road[],int v[])
 {
 	
 	int i,a,b,sum=0;
 	
 	sort(road);	//使road数组按照权值大小排序,这里没有写函数 
 	
 	//排好序之后从第一条边(权值最小)开始,取起点和终点,更新并查集(其实就是树) 
	 
	// 更新方法:1.如果两个顶点不再一棵树上,那么将起点的根节点作为根节点,终点的根节点作为子节点(只需将并查集数组的子节点
	
	//的值改成起点的值) 2.如果两个顶点在一棵树上,那么跳过。 
	
	//判断是否在一棵树上的方法:算出起点和终点的根节点,如果根节点相同那么就在一棵树,否则不在 
 	
 	for(i=0;i<enums;i++)	
 	{
 		
 		a=getRoot(v,road[i].start);
 		
 		b=getRoot(v,road[i].end);
 		
 		if(a!=b)
 		{
 			
 			v[b]=a;
 			
 			sum=sum+road[i].weight;
 			
 		}	
 		
 	}
 	
 	return sum;
 	
 }
 
 int getRoot(int v[],int vt)
 {
 	
 	while(vt!=v[vt])
 	{
 		
 		vt=v[vt];
 		
 	}
 	
 	return vt;
 	
 }
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该相等。 利润表: | 项目 | 金额(万元) | | ------- | ------------ | | 营业收入| 50618.25 | | 减:经营成本 | 332274.05| | 营业税金及附Prim算法Kruskal算法运行时间复杂度与图的大小(即节点数n和边数m)有关。 Prim算法的时间复杂度为O(n^2),其中n为节点数。具体来说,加 | 7616.47 | | 利息支出 | 11625 | | 折旧 | 111.44 | Prim算法每次需要从一个节点集合中找到与其相邻的最小边,而这个节点集合| 净利润 | 20142.34 | 现金流量表: 略。 最后,我们可以对财务报的大小最开始为1,每次将一个节点加入集合中,因此最多需要进行n次操作。每表进行工程经济学分析,并进行经济决策。 1. 资产负债表分析 资产负次操作需要找到与集合中节点相邻的最小边,这个操作的时间复杂度为O(n),债表显示了项目在各个时间点上的资产情况和负债与所有者权益情况。在本因此总时间复杂度为O(n^2)。 Kruskal算法的时间复杂度为O(mlogm项目中,流动资产为4224万元,主要是用于支付短期贷款和生产所需的流),其中m为边数。具体来说,Kruskal算法需要对边按照权值从小到大进行动资金。固定资产为2.5亿元,主要是用于购买生产设备。短期负排序,这个操作的时间复杂度为O(mlogm)。然后按照边权值从小到大的债为422.11万元,主要是用于支付短期贷款利息和流动资金。长期负债顺序逐个加入边,每次加入边之前需要判断这条边的两个端点是否在同一个为1.675亿元,主要是用于购买生产设备的贷款。盈余公积金为139.连通块中,这个判断可以使用并查集来实现,时间复杂度为O(logn)。因此42万元,是从净利润中提取的。所有者权益为6749.42万元,是项目的净资总时间复杂度为O(mlogm)。 需要注意的是,Prim算法Kruskal算法的时间复杂度都是在没有优化的情况下。在实际应用中,可以采用一些优化策略产。总计为2.391075亿元,资产负债表平衡。 2. 利润表分析 利润,例如使用堆来维护候选边集合,从而将Prim算法的时间复杂度降低到O(m表显示了项目在各个时间点上的收入、成本、税金和净利润。在本项目中,logn)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值