最小生成树的Java实现

来源:java认证发布时间:2012-11-12 13:12:38java认证视频

  /*

  * @input: 一个有向无环带权图,表述为一个二维数组graph[n][n]

  * @output: 最小生成树tree[n-1][3],tree[i][0]及tree[i][1]为边之顶点,tree[i][2]为权

  */

  public class MiniSpanTreeTest

  {

  static int[][] graph={

  {1000,6,1,5,1000,1000},

  {6,1000,5,1000,3,1000},

  {1,5,1000,5,6,4},

  {5,1000,5,1000,1000,2},

  {1000,3,6,1000,1000,6},

  {1000,1000,4,2,6,1000},

  };

  static int v=0;

  static int[][] tree;

  public static void main(String[] args)

  {

  MiniSpanTree miniSpanTree=new MiniSpanTree();

  miniSpanTree.input(graph, v);

  tree=miniSpanTree.getTree();

  for(int i=0; i

  System.out.println("边:" + tree[i][0] + "-" + tree[i][1] + " 权:" + tree[i][2]);

  }

  }

  }

  class MiniSpanTree

  {

  private int[][] graph;

  private int v;

  private int[][] tree;

  private boolean[] s;

  void input(int[][] graph, int v)

  {

  this.graph=graph;

  this.v=v;

  tree=new int[graph.length-1][];

  s=new boolean[graph.length];

  for(boolean i : s) i=false;

  s[v]=true;

  calculate();

  }

  void calculate()

  {

  for(int i=0; i

  int[][] edge ={{0,0,1000,},};

  for(int j=0; j

  for(int k=0; s[j]==true && k

  if(s[k]==false && graph[j][k]

  edge[0][0]=j;

  edge[0][1]=k;

  edge[0][2]=graph[j][k];

  }

  }

  }

  tree[i]=edge[0];

  s[tree[i][1]]=true;

  }

  }

  int[][] getTree()

  {

  return tree;

  }

  }

  结果如下:

  边:0-2  权:1

  边:2-5  权:4

  边:5-3  权:2

  边:2-1  权:5

  边:1-4  权:3

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答