Java 版 Prim 算法求最小生成树
来源:互联网 发布:windows 10企业版激活 编辑:程序博客网 时间:2024/06/05 11:40
最小生成树: 一个具有n个顶点的加权的无相连通图,用n-1条边连接这n个顶点,并且使得连接之后的所有边的权值之和最小的树。
Prim算法:先以一个结点作为最小生成树的第一个结点,然后以迭代的方式找出与最小生成树中各结点权值最小边,加到最小生成树中。加入之后如果产生回路则跳过这条边,选择下一个结点。当所有结点都加入到最小生成树中之后,就找出最小生成树了。
举个例子:
根据下图3个步骤找出最小生成树:
在写程序时,需要把连通图转化为邻接矩阵输入。假设A、B、C、D 为 1、2、3、4 :
代码如下:
package minSpanningTree;import java.util.Scanner;public class Prim { //用来初始化数组的,比结点数大就行 private static final int MAXN = 100; //INF表示不存在边的长度,用一个很大的数表示它 private static final int INF = 100000001; public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("请输入结点个数:"); int n = Integer.parseInt(s.nextLine()); System.out.println("结点个数: " + n); //邻接矩阵 int[][] w = new int[MAXN][MAXN]; //存放父结点的集合 int[] f = new int[MAXN]; for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { int t = Integer.parseInt(s.nextLine()); w[i][j] = (t == 0) ? INF :t; } } //生成最小生成树 toPrim(w, f, n); for(int i = 2; i <= n; i++) { System.out.println(i + "------>" + f[i]); } } private static void toPrim(int w[][], int f[], int n) { //用于存放结点的权值的集合 int d[] = new int[INF]; int k = 0; int m; //第一个结点与其它结点的权值加入集合中 for(int j = 1; j <= n; j++) { d[j] = (j == 1 ? 0 : w[1][j]); //第一个结点没有父结点,初始化为1 f[j] = 1; } //从第二个结点开始 for(int i = 2; i <= n; i++) { m = INF; //遍历与当前结点相连接的各个结点的权值并找出具有最小权值的结点 for(int j = 1; j <= n; j++) { if(d[j] <= m && d[j] != 0) { m = d[j]; k = j; } } //将上面找到的结点加入到集合中 d[k] = 0; //更新父d[],将k结点与其它结点连接的最小权值放进d[j]中 for(int j = 1; j <= n; j++) { if(d[j] > w[k][j] && d[j] != 0) { d[j] = w[k][j]; f[j] = k; } } } }}
输出结果:
2——>1 —-> A –B
3——>2 —-> B –C
4——>1 —-> A –D
0 0
- Java 版 Prim 算法求最小生成树
- prim算法求最小生成树程序
- prim算法,求最小生成树。
- prim经典算法求最小生成树
- Prim算法求最小生成树
- Prim算法求最小生成树
- prim算法求最小生成树
- POJ2421 prim算法求最小生成树
- Prim 算法求最小生成树
- 求最小生成树,普里姆(Prim)算法
- 求最小生成树,普里姆(Prim)算法
- Prim算法求最小生成树
- 求最小生成树,普里姆(Prim)算法
- Prim(普里姆)算法求最小生成树
- Prim算法求最小生成树
- Prim算法求最小生成树
- hdu3371 prim算法求最小生成树
- Prim算法求MST(最小生成树)
- 【华为面试】将输入的数字转换为大写形式
- javaScript 中变量
- Driver:模块参数、系统调用、字符设备驱动框架
- jqGrid单元格/行编辑模式下getRowData如何获取数据行
- hdu 2108 Shape of HDU
- Java 版 Prim 算法求最小生成树
- java wait用法详解
- NTP注意事项
- 配置YUM源的步骤
- Objective-C 运行时编程指南 之 Declared Properties
- AccessibilityService 一个类似辅助的类
- 微信总结2017/2/20—2017/2/26
- windows服务器maven私服搭建
- error: invalid new-expression of abstract class type 'Rectangle'