/*
* @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
① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;
② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。