博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
prime算法的使用
阅读量:4706 次
发布时间:2019-06-10

本文共 2072 字,大约阅读时间需要 6 分钟。

prime算法的使用

package PrimeApplication;import java.util.Scanner;/** *  农民要建立互联网络,目的使村庄里所有的农民连上网,并且总费用最小。 *  多组数据,每组数据给出一个n, *  然后给出n * n大小的无向图的邻接矩阵表示,值表示边权。 *  要求输出最小生成树的权值和。 * */public class Main {	public static int MAXCOST = Integer.MAX_VALUE;//整数的最大值	public static void main(String[] args) {		Scanner input = new Scanner(System.in);		int cost ;		while(input.hasNext()){			int n = input.nextInt();			int [][]adjMat = new int[n+1][n+1];			for(int i=1;i<=n;i++){				for(int j=1;j<=n;j++){					adjMat[i][j] = MAXCOST;				}			}						for(int i=1;i<=n;i++){				for(int j=1;j<=n;j++){					adjMat[i][j] = input.nextInt();				}			}						cost = prime(adjMat,n);			System.out.println(cost);											}			}	private static int prime(int[][] graph, int n) {		 /* lowcost[i]记录以i为终点的边的最小权值,当lowcost[i]=0时表示终点i加入生成树 */		   int lowcost[]=new int[n+1];		 		   /* mst[i]记录对应lowcost[i]的起点,当mst[i]=0时表示起点i加入生成树 */		   int mst[]=new int[n+1];		 		   int min, minid, sum = 0;		 		   /* 默认选择1号节点加入生成树,从2号节点开始初始化 */		    for (int i = 2; i <= n; i++){			/* 最短距离初始化为其他节点到1号节点的距离 */			lowcost[i] = graph[1][i];		 			/* 标记所有节点的起点皆为默认的1号节点 */			mst[i] = 1;		     }		 		    /* 标记1号节点加入生成树 */		    mst[1] = 0;		 		    /* n个节点至少需要n-1条边构成最小生成树 */		    for (int i = 2; i <= n; i++){			min = MAXCOST;			minid = 0;		 		       /* 找满足条件的最小权值边的节点minid */		       for (int j = 2; j <= n; j++){			  /* 边权值较小且不在生成树中 */			  if (lowcost[j] < min && lowcost[j] != 0){			     min = lowcost[j];			     minid = j;			  }		       }		     		       /* 输出生成树边的信息:起点,终点,权值 */			//System.out.printf("%c - %c : %d\n", mst[minid] + 'A' - 1, minid + 'A' - 1, min);		 		       /* 累加权值 */		       sum += min;		 		       /* 标记节点minid加入生成树 */		       lowcost[minid] = 0;		 		       /* 更新当前节点minid到其他节点的权值 */		       for (int j = 2; j <= n; j++){		         /* 发现更小的权值 */			  if (graph[minid][j] < lowcost[j]){			      /* 更新权值信息 */			      lowcost[j] = graph[minid][j];		 			      /* 更新最小权值边的起点 */			      mst[j] = minid;			   }		       }		     }		     /* 返回最小权值和 */			return sum;	}}

  

转载于:https://www.cnblogs.com/aicpcode/p/4266058.html

你可能感兴趣的文章
C语言第二次实验报告
查看>>
Go语言学习笔记(七)
查看>>
Linux查找疑似被挂木马文件方法以及Nginx根据不同IP做不同反向代理
查看>>
phpstorm 2018.1.6 和谐版安装方法
查看>>
NFS应用场景及环境搭建
查看>>
让xamarin的Entry绑定时,支持Nullable类型
查看>>
kivy学习三:打包成window可执行文件
查看>>
兄弟连PHP培训教你提升效率的20个要点
查看>>
【快报】基于K2 BPM的新一代协同办公门户实践交流会
查看>>
关于MySQL的行转列的简单应用
查看>>
Queue 队列的用法
查看>>
CDM常用命令
查看>>
游戏开发中常用的设计模式
查看>>
Linux 中/etc/profile、~/.bash_profile 环境变量配置及执行过程
查看>>
JAVA:图形之利用FontMetrics类居中
查看>>
使用rsync同步目录
查看>>
[读码时间] for循环遍历设置所有DIV块元素背景色为红色
查看>>
你会用AngularJS,但你会写AngularJS文档么?
查看>>
ORACLE清除某一字段重复的数据(选取重复数据中另一个字段时期最大值)
查看>>
网页调用迅雷下载文件
查看>>