我们在图的定义中说过,带有权值的图就是网结构。一个连通图的生成树是一个极小的连通子图,它含有图中全部的顶点,但只有足以构成一棵树的n-1条边。所谓的最小成本,就是n个顶点,用n-1条边把一个连通图连接起来,并且使得权值的和最小。综合以上两个概念,我们可以得出:构造连通网的最小代价生成树,即最小生成树(Minimum Cost Spanning Tree)。找连通图的最小生成树,经典的有两种算法,普里姆算法和克鲁斯卡尔算法。

prim实现:

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set; public class Prim { public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
int m = sc.nextInt();
if (n == 0 && m == 0) {
break;
}
int[][] map = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
map[i][j] = Integer.MAX_VALUE;
}
} for (int i = 0; i < m; i++) {
int u = sc.nextInt();
int v = sc.nextInt();
int w = sc.nextInt();
map[u][v] = w;
map[v][u] = w;
}
Edge[] e = new Edge[n];
prim(map, e, n);
for (int i = 0; i < n - 1; i++) {
System.out.println(e[i].from + " " + e[i].end + " "
+ e[i].weight);
} } } static void prim(int[][] map, Edge[] e, int n) {
Set<Integer> set1 = new HashSet<>();
Set<Integer> set2 = new HashSet<>();
set1.add(0);
for (int i = 1; i < n; i++)
set2.add(i);
int min = Integer.MAX_VALUE;
int k=0;
while (!set2.isEmpty()) {
min = Integer.MAX_VALUE;
int flag1 = 0;
int flag2 = 0;
for (int i : set1) {
for (int j : set2) {
if (map[i][j] < min) {
min = map[i][j];
flag1 = i;
flag2 = j;
}
}
}
set1.add(flag2);
set2.remove(flag2);
e[k]=new Edge();
e[k].from=flag1;
e[k].end=flag2;
e[k].weight=min;
k++;
} } private static class Edge {
int from;
int end;
int weight;
} }

  

prim算法查找最小生成树的更多相关文章

  1. Kruskal和Prim算法求最小生成树

    Kruskal算法求最小生成树 测试数据: 5 6 0 1 5 0 2 3 1 2 4 2 4 2 2 3 1 1 4 1 输出: 2 3 1 1 4 1 2 4 2 0 2 3 思路:在保证不产生回 ...

  2. HDU-1233 还是畅通工程 (prim 算法求最小生成树)

    prim 算法求最小生成树 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  3. 图的建立(邻接矩阵)+深度优先遍历+广度优先遍历+Prim算法构造最小生成树(Java语言描述)

    主要参考资料:数据结构(C语言版)严蔚敏   ,http://blog.chinaunix.net/uid-25324849-id-2182922.html   代码测试通过. package 图的建 ...

  4. hiho 1097 最小生成树一·Prim算法 (最小生成树)

    题目: 时间限制:10000ms 单点时限:1000ms 内存限制:256MB   描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥有不止一个城市了! 但是,问 ...

  5. hdu 1162 Eddy&#39;s picture (Kruskal算法,prim算法,最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1162 [题目大意] 给你n个点的坐标,让你找到联通n个点的一种方法.保证联通的线路最短,典型的最小生成 ...

  6. Prim算法解决最小生成树

    一.最小生成树问题 什么是最小生成树问题?给你一个带权连通图,需要你删去一些边,使它成为一颗权值最小的树. 二.Prim算法 1)输入:输入一个带权连通图,顶点集合V,边集合E 2)初始化:Vnew= ...

  7. 【算法】prim算法(最小生成树)(与Dijkstra算法的比较)

    最小生成树: 生成树的定义:给定一个无向图,如果它的某个子图中任意两个顶点都互相连通并且是一棵树,那么这棵树就叫做生成树.(Spanning Tree) 最小生成树的定义:在生成树的基础上,如果边上有 ...

  8. prim算法【最小生成树1】

    适用范围:要求无向图 prim算法(读者可以将其读作“普里姆算法”)用来解决最小生成树问题, 其基本思想是: ·对图G(VE)设置集合S,存放已被访问的顶点, ·然后每次从集合V-S中选择与集合S的最 ...

  9. 算法设计和分析(Prim算法构建最小生成树)

    问题: 给定无向图G(N,M)表明图G有N个顶点,M条边,通过Prim算法构造一个最小生成树 分析: 算法流程: 构造好的最小生成树就是step6 运行代码: #include<cstdio&g ...

随机推荐

  1. linux下MySQL安装及设置

    转自:http://www.entage.net/1/viewspace-25420 1. 关于本文    本文将以MySQL 5.0.51为例,以CentOS 5为平台,讲述MySQL数据库的安装和 ...

  2. NoSuchMethodError

    http://www.tuicool.com/articles/iIVbuuZ 有些服务器是指定某个目录下的所有jar包,这样如果同时存在不同版本的jar包,也会引起这个问题,算一个检查点

  3. UML(一) 类图及类间关系

    原创文章,同步发自作者个人博客,http://www.jasongj.com/uml/class_diagram/ UML类图 UML类图介绍 在UML 2.*的13种图形中,类图是使用频率最高的UM ...

  4. js按钮浮动随手指方向移动而移动

    window.document.getElementById("moveDIV").addEventListener("touchmove", function ...

  5. 最小生成树——prim算法

    prim算法是选取任意一个顶点作为树的一个节点,然后贪心的选取离这棵树最近的点,直到连上所有的点并且不够成环,它的时间复杂度为o(v^2) #include<iostream>#inclu ...

  6. React的虚拟DOM

    ReactJs的一大特点就是引进了虚拟dom(Virtual DOM)的概念.为什么我们需要Virtual DOM,Virtual DOM给我们带来了什么优势. 首先我们要了解一下浏览器的工作流. 当 ...

  7. ASCII电脑编码

    Bin Dec Hex 缩写/字符 解释 0000 0000 0 00 NUL(null) 空字符 0000 0001 1 01 SOH(start of headline) 标题开始 0000 00 ...

  8. oracle更新语句merge和update

    update: update语句更新需要根据索引或者数据列遍历所有行 语句举例: update table1  a set column1=(select column from table2 b w ...

  9. Linear Algebra lecture9 note

    Linear independence Spanning a space Basis and dimension 以上概念都是针对a bunch of vectors, 不是矩阵里的概念   Supp ...

  10. Invert Binary Tree

    Invert a binary tree: 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 简单递归实现,调换左右子树,子树的所有子树结构 ...