最小生成树的prime算法

柔情只为你懂 2022-07-16 11:15 248阅读 0赞
  1. /**
  2. * 最小生成树的prim算法
  3. * @author liuy
  4. */
  5. public class Prim {
  6. public static void prim(int num, float[][] weight) { //num为顶点数,weight为权
  7. float[] lowcost = new float[num + 1]; //到新集合的最小权
  8. int[] closest = new int[num + 1]; //代表与s集合相连的最小权边的点
  9. boolean[] s = new boolean[num + 1]; //s[i] == true代表i点在s集合中
  10. s[1] = true; //将第一个点放入s集合
  11. for(int i = 2; i <= num; i++) { //初始化辅助数组
  12. lowcost[i] = weight[1][i];
  13. closest[i] = 1;
  14. s[i] = false;
  15. }
  16. for(int i = 1; i < num; i++) {
  17. float min = Float.MAX_VALUE;
  18. int j = 1;
  19. for(int k = 2; k <= num; k++) {
  20. if((lowcost[k] < min) && (!s[k])) { //根据最小权加入新点
  21. min = lowcost[k];
  22. j = k;
  23. }
  24. }
  25. System.out.println(“加入点” + j + “. “ + j + “—-“ + closest[j]);//新加入点的j和与j相连的点
  26. s[j] = true;//加入新点j
  27. for(int k = 2; k <= num; k++) {
  28. if((weight[j][k] < lowcost[k]) && !s[k]) { //根据新加入的点j,求得最小权
  29. lowcost[k] = weight[j][k];
  30. closest[k] = j;
  31. }
  32. }
  33. }
  34. }
  35. public static void main(String[] args) {
  36. // ①
  37. // / | /
  38. // 6 1 5
  39. // / | /
  40. // ②-5—③—5—④
  41. // / // /
  42. // 3 6 4 2
  43. // // //
  44. // ⑤—6-⑥
  45. //最小生成树为:
  46. // ①
  47. // |
  48. // 1
  49. // |
  50. // ②-5—③ ④
  51. // / / /
  52. // 3 4 2
  53. // / //
  54. // ⑤ ⑥
  55. //
  56. float m = Float.MAX_VALUE;
  57. float[][] weight = { { 0, 0, 0, 0, 0, 0, 0},
  58. { 0, m, 6, 1, 5, m, m},
  59. { 0, 6, m, 5, m, 3, m},
  60. { 0, 1, 5, m, 5, 6, 4},
  61. { 0, 5, m, 5, m, m, 2},
  62. { 0, m, 3, 6, m, m, 6},
  63. { 0, m, m, 4, 2, 6, m}};//上图的矩阵
  64. prim(weight.length - 1, weight);
  65. //加入点3. 3—-1
  66. //加入点6. 6—-3
  67. //加入点4. 4—-6
  68. //加入点2. 2—-3
  69. //加入点5. 5—-2
  70. }
  71. }

发表评论

表情:
评论列表 (有 0 条评论,248人围观)

还没有评论,来说两句吧...

相关阅读

    相关 生成prime

    prime算法 每次加入已(加入树集合)结点连着(未加入树)的最短边直至所有结点加入最小生成树 源代码: \include<stdio.h> \include<std

    相关 生成算法

    最小生成树的两种算法是Prim算法和Kruskal算法,前者的复杂度只跟图的边数目相关:O(n^2),后者的复杂度只跟图的顶点数目相关:O(eloge)。两个算法都依据贪心算法