最小生成树Prim

转载 2015年11月18日 08:31:13

优化算法

package mintree;
/*
 * prim算法的思想: 初始化时,v0加入到最小树,其他所有顶点作为未加入树的集合
 * 取矩阵中第一横,lowcost[],其实就是v0与其他顶点的距离,找出最小的,比如v4,v4加入到最小树,此时最小数有两个节点了v0和v4
 * 接下来,要找到其他未加入树顶点中与最小树顶点距离最近的那个点 lowcost[]这是v0的数据 找到v4与其他顶点的距离数据,即矩阵的第5横
 * tmp[] 然后rmp[]和lowcost[]纵向对比大小,小的数据设置到lowcost[]
 * 然后横向对比lowcost[]数据,找到最小点X,这个X即为与最小树距离最近的那个点 同理,依次将所有顶点加入到最小树
 */
public class Prim {


static int MAX = 65535;
public static void prim(int[][] graph, int n) {


char[] c = new char[] { 'A', 'B', 'C', 'D', 'E' };
int[] lowcost = new int[n];
int[] mst = new int[n];
int i, j, min, minId, sum = 0;


for (i = 1; i < n; i++) {
lowcost[i] = graph[0][i];//
mst[i] = 0;
}
    //找出以选定开始的第一个定点为出发点的最短距离

for (i = 1; i < n; i++) {//n-1次循环,也就是查找n-1个最小边
min = MAX;
minId = 0;
for (j = 1; j < n; j++) {
if (lowcost[j] < min && lowcost[j] != 0) {//横向比较lowcost[]
min = lowcost[j];
minId = j;
}
}
System.out.println(c[mst[minId]] + "到" + c[minId] + " 权值:" + min+"......."+i);


sum = sum + min;
lowcost[minId] = 0;


for (j = 1; j < n; j++) {
if (graph[minId][j] < lowcost[j]) {//对graph[minId][j]的理解
lowcost[j] = graph[minId][j];
mst[j] = minId;
}
}
}
System.out.println("sum:" + sum);
}

public static void main(String[] args) {
int[][] map = new int[][] {
{ 0, 4, 3, MAX, MAX },
{ 4, 0, 18, MAX, MAX }, 
{ 3, 18, 0, 22, 5 },
{ 0, MAX, 22, 0, 9 },
{ MAX, MAX, 5, 9, 0} };
prim(map, map.length);
}
}

最小生成树(prim算法与kruskal算法)(模板)

th写的总结,很不错,转载一下:点击打开链接   首先说一下什么是树:     1、只含一个根节点     2、任意两个节点之间只能有一条或者没有线相连     3、任意...
  • zwj1452267376
  • zwj1452267376
  • 2015年08月13日 08:54
  • 1505

数据结构:最小生成树--Prim算法

最小生成树 给定一无向带权图,顶点数是n,要使图连通只需n-1条边,若这n-1条边的权值和最小,则称有这n个顶点和n-1条边构成了图的最小生成树(minimum-cost spanning ...
  • zhangxiangDavaid
  • zhangxiangDavaid
  • 2014年08月05日 00:30
  • 10284

贪心算法——Prim最小生成树

1、首先介绍一下什么是贪心算法: 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。ps:不懂得话可...
  • baidu_28944591
  • baidu_28944591
  • 2016年06月26日 16:50
  • 1762

c++ 最小生成树之prim算法

//最小生成树 #include #include #include using namespace std; #define MAX_LINE 7 char tree[MAX_LINE][...
  • zdavb
  • zdavb
  • 2015年04月14日 23:52
  • 989

最小生成树Prim算法理解

MST(Minimum Spanning Tree,最小生成树)
  • yeruby
  • yeruby
  • 2014年08月16日 18:49
  • 85773

prim最小生成树算法原理

prim 最小生成树算法原理 主要需要了解算法的原理、算法复杂度、优缺点 、刻画和度量指标 评价等 可以查阅相关的文献,这部分内容主要整合了两篇博客的内容 分别是:http://blog.csdn....
  • lynnucas
  • lynnucas
  • 2016年05月03日 16:51
  • 3849

最小生成树Prim算法 堆优化

对于最小生成树prim算法中,我们每次要扫描一遍邻接表才能找到最小的边的点,但是如果利用堆这种数据结构来进行优化,我们可以大大减小这种查找的时间消耗 我们利用邻接表和小根堆来进行优化,下面是代码解析...
  • ltyqljhwcm
  • ltyqljhwcm
  • 2016年03月19日 14:02
  • 993

最小生成树(二)--prim算法实现以及堆优化

一、最小生成树---prim算法实现 思想: 1、从任意一个顶点开始构造生成树,假设就从1号顶点吧, 首先将顶点1加入生成树中,用一个一维数组book来标记 哪些顶点已经加入了生成树。  2、用...
  • qq_16997551
  • qq_16997551
  • 2016年04月29日 19:59
  • 841

最小生成树之prim算法 原理

最小生成树之prim算法 边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权。    最小生成树(MST):权值最小的生成树。    生成树和...
  • hnust_xiehonghao
  • hnust_xiehonghao
  • 2014年07月21日 11:09
  • 3384

ACM:prim最小生成树题目汇总

1.http://115.28.138.223/view.page?gpid=T18import java.util.Scanner; public class Main{ static fi...
  • EmilSinclair4391
  • EmilSinclair4391
  • 2016年05月03日 19:20
  • 464
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:最小生成树Prim
举报原因:
原因补充:

(最多只允许输入30个字)