Prim算法Java朴素版
//Prim算法求最小生成树,使用Java语言的简单实现
// 图用邻接矩阵存储
import java.util.*;
public class PrimMST
{
private static int MAX = Integer.MAX_VALUE;
public static int prim(int graph[][], int n)
{
//最小权值和
int sumcost = 0;
// lowcost[i]记录以i为终点的边的权值,当lowcost[i]=0时表示终点i加入生成树
int lowcost[]=new int[n+1];
// mst[i]记录对应lowcost[i]的起点,当mst[i]=0时表示起点i加入生成树
int mst[]=new int[n+1];
//默认选择1号节点加入生成树
mst[1] = 0;
lowcost[1] = 0;
for (int i = 2; i <= n; i++)
{
lowcost[i] = graph[1][i];
mst[i] = 1;
}
// n个节点需要n-1条边构成最小生成树
for (int i = 2; i <= n; i++)
{
int min = MAX;
int minId = 0;
for (int j = 2; j <= n; j++)
{
if (lowcost[j] < min && lowcost[j] != 0)
{
min = lowcost[j];
minId = j;
}
}
sumcost += min;
//点midId加入生成树
lowcost[minId] = 0;
//输出: 起点 终点 权值
System.out.println(mst[minId] + " " + minId + " " + min);
// 更新当前节点minid到其他节点的权值
for (int j = 2; j <= n; j++)
{
if (lowcost[j] > graph[minId][j])
{
lowcost[j] = graph[minId][j];
mst[j] = minId;
}
}
}
return sumcost;
}
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
//读取节点和边的数目
int vertex = in.nextInt();
int arc = in.nextInt();
int[][] graph = new int[vertex + 1][vertex + 1];
//初始化图, 所有节点间距离为无穷大
for (int i = 1; i <= vertex; i++)
{
for (int j = 1; j <= vertex; j++)
{
graph[i][j] = MAX;
}
}
//读取边的信息
for (int i = 1; i <= arc; i++)
{
int x = in.nextInt();
int y = in.nextInt();
int cost = in.nextInt();
graph[x][y] = cost;
}
//求最小生成树
System.out.println("-------------");
int sumcost = prim(graph, vertex);
System.out.println("最小权值和为: " + sumcost);
}
}
输入(起点 终点 权值):
5 8
1 2 2
2 4 3
1 4 4
3 5 5
2 5 6
2 3 6
3 4 10
4 5 15
输出:
1 2 2
2 4 3
2 3 6
3 5 5
注:5 顶点个数 8 边数
分享到:
相关推荐
代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小生成树Prim算法代码代码 最小...
最小生成树_Prim算法实现C++ 最小生成树_Prim算法实现C++ 最小生成树_Prim算法实现C++
使用Prim算法编写的最小生成树(C语言),为更好地学习数据结构
利用c++编程实现,最小生成树的Prim算法,
实现构造最小生成树的Prim算法
基于MATLAB的最小生成树Prim算法 源代码程序.rar
图论算法:最小生成树——Prim算法和Kruskal算法C 实现
prim算法 Kruskal算法分别实现最小生成树
最小生成树的Prim算法 /2,Prim算法的描述:// 假如N=(V,{E})是连通网,TE是N上最小生成树中边得集合。算法从U={u0}(u0是V中的元素),TE={}开始,重复执行下述操作:// 在所有u属于U,v属于V-U的边(u,v)属于E...
最小生成树prim最小生成树prim最小生成树prim最小生成树prim
普里姆算法通过寻找无向图中权值最小的边,并且将其组合成最小生成树,也就是图的相对最短路径,同时将最小生成树以点集的形式输出,便于观察
最小生成树,Prim算法的使用(邻接矩阵实现)
prim算法的具体实现动画,配合代码帮助理解prim算法!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
java算法分析与设计之最小生成树(prim算法)源代码 算法作为计算机专业学生的必修课,同时也是软件开发过程中必备的编程思想,对学习研究计算机专业意义重大;正因为这门课程难,所以除了相关方面的书籍,网络资源少...
最小生成树的prim算法
基于matlab的最小生成树的prim算法,有详细的解释,可直接运行
Prim算法与Kruskal算法 求最小生成树 源代码 实验报告 完整
数据结构教程实验--用Prim算法构造最小生成树
自己写的Prim算法,求最小生成树,若看不明白,请参看《算法导论》中的详细描述。