package prim;
/**
* 图的邻接矩阵实现的Prim算法
* @author Administrator
*
*/
public class Prim {
public void getPrim(int[][] g,int v){
boolean mstset[] = new boolean[v];
int parent[] = new int[v];
int[] key = new int[v];
for(int i=0;i<v;i++){
key[i] = Integer.MAX_VALUE;
}
key[0] = 0;
parent[0] = -1;
for(int i=0;i<v;i++){
int u = getmin(key,v,mstset);
mstset[u] = true;
for(int j=0;j<v;j++){
if(g[u][j]!=0&&(!mstset[j])&&g[u][j]<key[j]){
parent[j] = u;
key[j] = g[u][j];
}
}
}
for(int i=1;i<v;i++){
System.out.println(i+"->"+parent[i]);
}
}
private int getmin(int[] key, int v,boolean[] mstset) {
int minnum = Integer.MAX_VALUE;
int minindex = 0;
for(int i=0;i<v;i++){
if((!mstset[i])&&key[i]<minnum){
minnum = key[i];
minindex = i;
}
}
return minindex;
}
public static void main(String[] args) {
Prim p = new Prim();
int[][] g = {{0, 2, 0, 6, 0},
{2, 0, 3, 8, 5},
{0, 3, 0, 0, 7},
{6, 8, 0, 0, 9},
{0, 5, 7, 9, 0},
};
p.getPrim(g, 5);
}
}
Prim算法的简单实现
最新推荐文章于 2024-02-26 08:00:00 发布