最小生成树之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代表从序号为一的顶点开始
}
运行结果如下:
注意最小生成树不是唯一的,但是总权值是一样的。
注:如果程序出错,可能是使用的开发平台版本不同,请点击如下链接: 解释说明
最小生成树之Prime法的更多相关文章
- 【算法导论】最小生成树之Prime法
关于最小生成树的概念,在前一篇文章中已经讲到,就不在赘述了.下面介绍Prime算法: 其基本思想为:从一个顶点出发,选择由该顶点出发的最小权值边,并将该边的另一个顶点包含进来,然后找出 ...
- 最小生成树(prime算法 & kruskal算法)和 最短路径算法(floyd算法 & dijkstra算法)
一.主要内容: 介绍图论中两大经典问题:最小生成树问题以及最短路径问题,以及给出解决每个问题的两种不同算法. 其中最小生成树问题可参考以下题目: 题目1012:畅通工程 http://ac.jobdu ...
- 最小生成树---Kruskal/Prime算法
1.Kruskal算法 图的存贮采用边集数组或邻接矩阵,权值相等的边在数组中排列次序可任意,边较多的不很实用,浪费时间,适合稀疏图. 方法:将图中边按其权值由小到大的次序顺序选取,若选边后不 ...
- ACM__最小生成树之prime
今天做了一道题,根本没想到最小生成树,稀里糊涂的浪费了很多时间,复习一下 转载自https://www.cnblogs.com/zhangming-blog/p/5414514.html Prim算法 ...
- CF F. MST Unification (最小生成树避圈法)
题意 给一个无向加权联通图,没有重边和环.在这个图中可能存在多个最小生成树(MST),你可以进行以下操作:选择某条边使其权值加一,使得MST权值不变且唯一.求最少的操作次数. 分系:首先我们先要知道为 ...
- 最小生成树之prime算法
public class Prime { public static void main(String[] args) { //路径矩阵 int arcs[][] = {{-1,6,1,5,-1,-1 ...
- poj 1258 Agri-Net【最小生成树(prime算法)】
Agri-Net Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44827 Accepted: 18351 Descri ...
- 【算法导论】最小生成树之Kruskal法
在图论中,树是指无回路存在的连通图.一个连通图的生成树是指包含了所有顶点的树.如果把生成树的边的权值总和作为生成树的权,那么权值最小的生成树就称为最小生成树.因为最小生成树在实际中有很多应用,所以我们 ...
- 最小生成树(Prime算法)
最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥有不止一个城 ...
随机推荐
- java实现的kmp算法
package DataStructure; import java.util.ArrayList; import java.util.List; //KMP算法的实现 //以下代码由freedom结 ...
- @Repository @Resource
Spring的注解形式:@Repository.@Service.@Controller,它们分别对应存储层Bean,业务层Bean,和展示层Bean. @Repository.@Service.@C ...
- hibernate不关闭session后果
(转自:百度知道) 看是怎么获得session的. 方法1: 通过配置监听器后,在Dao中用getCurrentSession获取(内部原理....),此时无需管理session的关闭与否: 方法2: ...
- 解决mysql中文乱码(总)
转自:http://hi.baidu.com/cnvienna/blog/item/2e99efdfd94fc61862279801.html MySQL会出现中文乱码的原因不外乎下列几点: .ser ...
- 【英语】Bingo口语笔记(76) - 不知如何应答的场景对话
- equal 和 ==
刚才看了一下别人的博客,想加深一下对 equal 和 == 的了解. 总结了几点: 1.equal 每个类都有必要覆盖一下,对于String 类,已经覆盖,比较的是String对象的字符序列是否相等. ...
- yii2 html下拉框
下拉框 带默认值 <?php $form=ActiveForm::begin(); echo $form->field($model,'uname', ['inputOptions'=&g ...
- JAVA中的成员变量与局部变量
package com.imooc; //1.定义一个类 public class Telphone { //2.属性(成员变量)有什么 float screen; float cpu; float ...
- WCF服务通过防火墙怎么设置
设置防火墙 1.首先点击控制面板->系统与安全->Window防火墙->点击允许程序通过Windows防火墙 2.查找Windows Communication Foundation ...
- 如何配置Drupal数据库信息?
Drupal的数据库连接信息通过文件settings.php中的变量$databases设置.变量$databases是一个二维的数组,第一维称为key,第二维称为target.使用这种方式可以处理多 ...