最小生成树算法 1.Prim算法
最小生成树(MST):一个有N个点的图,边一定是大于等于N-1条边的。在这些边中选择N-1条出来,连接所有N个点。这N-1条边的边权之和是所有方案中最小的。
Prim算法的时间复杂度时O(n^2)的,因此适用于稠密图的最小生成树,如果是稀疏图的情况下采用Kruskal算法更好。
Prim算法蕴含了贪心的思想,其原理是把图中所有的点分成两个集合,一个集合(V)是已经在生成树中的点,另一个集合(G)是不在生成树中的点,然后寻找起点在V中,终点在G中的边中权值最小的边加入生成树,然后把终点从G移到V中,最后直到G中没有元素即可。这样做既保证了最小生成树的要求也不会产生回路。
code:
#include<stdio.h>
#include<stdlib.h>
#define max 10000000
int g[][]={{max,,max,max,max,,max},
{,max,,,max,,max},
{max,,max,,,max,max},
{max,,,max,,,max},
{max,max,,,max,,},
{,,max,,,max,max},
{max,max,max,max,,max,max}}; int i,dist[],flag[]={},j,s=;
void prim(int vi){ for(i=;i<;i++)
dist[i]=g[vi][i];
flag[vi]=;
for(i=;i<;i++){
int min=max;
int k; for(j=;j<;j++){
if(dist[j]<min && !flag[j]){
k=j;
min=dist[j];
}
}
flag[k]=;
for(j=;j<;j++){
if(dist[j]>g[k][j])
dist[j]=g[k][j];
}
}
}
int main(){
int i,j;
prim();
for(i=;i<;i++) {
s+=dist[i];
printf("%d\n",dist[i]);}
printf("%d",s);
return ;
}
最小生成树算法 1.Prim算法的更多相关文章
- 最小生成树——Kruskal与Prim算法
		
最小生成树——Kruskal与Prim算法 序: 首先: 啥是最小生成树??? 咳咳... 如图: 在一个有n个点的无向连通图中,选取n-1条边使得这个图变成一棵树.这就叫“生成树”.(如下图) 每个 ...
 - 最小生成树---普里姆算法(Prim算法)和克鲁斯卡尔算法(Kruskal算法)
		
普里姆算法(Prim算法) #include<bits/stdc++.h> using namespace std; #define MAXVEX 100 #define INF 6553 ...
 - hdu 1162 Eddy's picture (Kruskal算法,prim算法,最小生成树)
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1162 [题目大意] 给你n个点的坐标,让你找到联通n个点的一种方法.保证联通的线路最短,典型的最小生成 ...
 - 【算法】prim算法(最小生成树)(与Dijkstra算法的比较)
		
最小生成树: 生成树的定义:给定一个无向图,如果它的某个子图中任意两个顶点都互相连通并且是一棵树,那么这棵树就叫做生成树.(Spanning Tree) 最小生成树的定义:在生成树的基础上,如果边上有 ...
 - Dijkstra 算法、Kruskal 算法、Prim算法、floyd算法
		
1.dijkstra算法 算最短路径的,算法解决的是有向图中单个源点到其他顶点的最短路径问题. 初始化n*n的数组. 2.kruskal算法 算最小生成树的,按权值加入 3.Prim算法 类似dijk ...
 - 算法之prim算法
		
最小生成树是数据结构中图的一种重要应用,它的要求是从一个带权无向完全图中选择n-1条边并使这个图仍然连通(也即得到了一棵生成树),同时还要考虑使树的权最小. prim算法就是一种最小生成树算法. 普里 ...
 - 最小生成树问题:Kruskal算法 AND Prim算法
		
Kruskal算法: void Kruskal ( ) { MST = { } ; //边的集合,最初为空集 while( Edge ...
 - 图-kruskal算法,prim算法
		
要求无向图 最小生成树: 连通性,累加和最小 并查集 结构 K算法 从最小的边开始,加上有没有形成环,没有就加,加上有环就不要 难点:如何判断加上一条边,有没有形成环. P算法 从点的角度开始
 - 无向图最小生成树(prim算法)
		
普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小.该算法于1930年由捷 ...
 
随机推荐
- windows 服务器时间同步失败处理方法
			
服务器的时间同步失败,通过命令行的形式进行处理. 1.编写时间命令行代码 w32tm /config /manualpeerlist:time.windows.com /syncfromflags:M ...
 - WAKE-WIN10-SOFT-MATio
			
1,matio Matio is an open-source C library for reading and writing binary MATLAB MAT files. This libr ...
 - February 23 2017 Week 8 Thursday
			
In order to be irreplaceable, one must always be different. 想要无可取代,必须与众不同. In recent days, a news ab ...
 - python UI自动化实战记录二:请求接口数据并提取数据
			
该部分记录如何获取预期结果-接口响应数据,分成两步: 1 获取数据源接口数据 2 提取后续页面对比中要用到的数据 并且为了便于后续调用,将接口相关的都封装到ProjectApi类中. 新建python ...
 - Java里面String的编码问题
			
Java里面内置字符串全部是utf-16编码,详细的编码方式看这里 import java.nio.charset.Charset; import java.util.Arrays; import j ...
 - ZOJ 2386 容斥原理
			
题意:给出n个数,和m(1<=m<=200 000 000),求1~M中能被这n个数其中任意一个数整除的个数: 分析:n范围很小,可以枚举选择被哪些数整除,被奇数个整数整除加m/这个n个数 ...
 - 围绕react衍生出来的思考
			
优势一.声明式开发 首先react是声明式的开发方式,这个与之对应的是命令式开发方式,之前在用jquery写代码的时候,都是直接来操作dom,直接操作dom的这种编程方式,我们把他叫做命令式的编程,也 ...
 - POJ 3461 Oulipo 【KMP统计子串数】
			
传送门:http://poj.org/problem?id=3461 Oulipo Time Limit: 1000MS Memory Limit: 65536K Total Submission ...
 - VS2012 Getting Started with Owin and Katana
			
参考地址:http://www.asp.net/aspnet/overview/owin-and-katana/getting-started-with-owin-and-katana 小提示: 该示 ...
 - C# 通过socket实现UDP 通信
			
UDP不属于面向连接的通信,在选择使用协议的时候,选择UDP必须要谨慎.在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重.但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小, ...