Kruskal贪心算法实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
package com.jungoo.chapter8; import java.util.ArrayList; import java.util.List; /** * 输入一个带权的连通无向图 生成该图的最小生成树 该类实现Kruskal算法 该算法以边为主 适用于边多点少的图形中 * * @author administrator */ public class Kruskal { /** * 代表字符的数字 A-0, B-1, C-2, D-3 ,E-4 */ // 当两个顶点没有连线的时候将其权值设为MOUSTMAX private static final int MOUSTMAX = 1000; // 保存点集的第一个集合 private static ListString START = new ArrayListString(); // 保存点集的第二个集合 private static ListString END = new ArrayListString(); /** * @param array * 带权值的二维数组 */ public static void sort(int[][] array) { int min = array[0][0]; // 找到当前二维数组中最小的值 for (int i = 0; i array.length; i++) { for (int j = 0; j array.length; j++) { if (array[i][j] = min) { min = array[i][j]; } } } // 定义两个变量存储相应坐标,二维数组中有array[0][0]所以如下定义 int varx = Integer.MAX_VALUE; int vary = Integer.MAX_VALUE; // 将最小处的值改变 for (int i = 0; i array.length; i++) { for (int j = 0; j array.length; j++) { if (array[i][j] == min) { array[i][j] = MOUSTMAX; varx = i; vary = j; break; } } } // 将数字转化成字符 String charx = Kruskal.tochar(varx); String chary = Kruskal.tochar(vary); // 判断是否有环路 ListString laststring = Kruskal.dest(charx, chary); for (String i : laststring) { System.out.print(i + ); } } /** * 判断是否构成回路 * @param charx * X坐标 * @param chary * Y坐标 * @return List * String */ public static ListString dest(String charx, String chary) { ListString last = new ArrayListString(); // 初始点集为空时 if (END.size() == 0) { last.add(charx + chary); END.add(charx); END.add(chary); } else { // 边的坐标并不全在两个点集中的任何一个点集中,如果在任何一个点集就会构成回路 if (!(END.contains(charx) END.contains(chary) || START .contains(charx) START.contains(chary))) { // 如果 某点在一个点集中,另一个点在另一个点集中 if (END.contains(charx) START.contains(chary)) { last.add(charx + chary); // 构成新的点集 for (String char1 : START) { if (!END.contains(char1)) { END.add(char1); }

文档评论(0)

飞扬的岁月 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档