prim算法java语言实现

原创 2012年03月30日 16:56:55
package com.test.prim;


import java.util.ArrayList;


public class PrimMiniSpanTree {


/**
* @param args
*/
protected final static int Max = 1000;
ArrayList<Closedge> al = new ArrayList<Closedge>();
public static void main(String[] args) {

PrimMiniSpanTree pm = new PrimMiniSpanTree();
int[][] m = { { Max, 6, 1, 5, Max, Max }, { 6, Max, 5, Max, 3, Max },
{ 1, 5, Max, 5, 6, 4 }, { 5, Max, 5, Max, Max, 2 },
{ Max, 3, 6, Max, Max, 6 }, { Max, Max, 4, 2, 6, Max } };
MGraph mg = new MGraph(m);


pm.prim(mg, 0);


}


public void prim(MGraph mg, int u) {


// Closedge[] closedges = new Closedge[6];
int k = u;


for (int j = 0; j < mg.getVertexNum(); j++)
{
Closedge cl = new Closedge();
cl.setVertex(u);
cl.setLowcost(mg.getCost(k, j));
al.add(j, cl);
// System.out.println(cl.getVertex()+","+cl.getLowcost());
}
// System.out.println("aaaaaaaaaaaaaaa");
for (int i = 0; i < mg.getVertexNum(); i++) {
k = min();
// System.out.println(k+"kkkkkkkkkkkkkkkkkk");


System.out.println("加入边权值:"+al.get(k).getLowcost() + "," +"加入顶点:"+ k);
al.get(k).setLowcost(0);
for (int j = 0; j < mg.getVertexNum(); j++)
if (mg.getCost(k, j) < al.get(j).getLowcost()&&mg.getCost(k, j)>0&&al.get(j).getLowcost()>0) {
al.get(j).setLowcost(mg.getCost(k, j));
// System.out.println(al.get(j).getLowcost()+"cccccccccccc");
al.get(j).setVertex(mg.getVertex(k));
// System.out.println(al.get(j).getVertex()+"eeeeeeeeee");
}


}
}


public int min() {
int m = Max;
int n = 0;
for (int i = 0; i < al.size(); i++) {
if (al.get(i).getLowcost() < m && al.get(i).getLowcost() > 0)
{
m = al.get(i).getLowcost();
n = i;
}
// System.out.println(al.get(i).getVertex()+","+al.get(i).getLowcost());
// System.out.println(m);
// System.out.println("ddddddddddddddddddd");
}
al.get(n).setLowcost(m);
al.get(n).setVertex(n);
return n;
}

}


package com.test.prim;


public class MGraph {
private int[] vertexs = new int[6]; //顶点集合
private int [][] matrix = new int[6][6];//矩阵
public MGraph(int [][] matrix)
{
for(int i = 0;i<matrix.length;i++)
{
for(int j = 0;j<matrix.length;j++)
{
this.matrix[i][j] = matrix[i][j];
}
}
for(int i=0;i<matrix.length;i++ )
{
vertexs[i] = i;
}
}

public int getVertexNum()
{
return matrix.length;
}

public int getCost(int vertex1,int vertex2)
{
return matrix[vertex1][vertex2];
}

public int getVertex(int i)
{
return vertexs[i];
}
}


package com.test.prim;


public class Closedge {
private int lowcost;
private int vertex;
public int getLowcost() {
return lowcost;
}
public void setLowcost(int lowcost) {
this.lowcost = lowcost;
}
public int getVertex() {
return vertex;
}
public void setVertex(int vertex) {
this.vertex = vertex;
}

}

图的建立(邻接矩阵)+深度优先遍历+广度优先遍历+Prim算法构造最小生成树(Java语言描述)

主要参考资料:数据结构()
  • wxisme
  • wxisme
  • 2014年11月06日 23:03
  • 469

C语言实现prim算法

  • 2015年08月12日 22:06
  • 82KB
  • 下载

Prim算法最小生成树(C语言)

  • 2014年10月16日 16:31
  • 516B
  • 下载

最小生成树Prim算法朴素版 C语言实现

最小生成树Prim算法朴素版 C语言实现

C语言——Prim算法实现最小生成树

Prim算法C语言实现

Prim算法实现最小生成树

  • 2017年11月12日 14:22
  • 1014B
  • 下载

实现构造最小生成树的Prim算法

  • 2016年12月14日 19:43
  • 3.42MB
  • 下载

Prim算法C语言实现

#include #include #include #define NUM 6 typedef struct Node { int num; int data; } No...

最小生成树Prim算法朴素版 C语言实现

代码的注释我写得很详细,方便理解,有几点需要说明一下。 1、2个for循环都是从2开始的,因为一般我们默认开始就把第一个节点加入生成树,因此之后不需要再次寻找它。 2、lowcost[i]...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:prim算法java语言实现
举报原因:
原因补充:

(最多只允许输入30个字)