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算法代码代码 最小...
标题中的“POJ 1789 最小生成树之prim算法”指的是一个在线编程竞赛题目,来源于普林斯顿开放在线课程(POJ)平台。该题目要求参赛者实现Prim算法,这是一种解决图论问题中寻找最小生成树的经典算法。最小生成树是在...
最小生成树_Prim算法实现C++ 在计算机科学中,Prim算法是一种常用的最小生成树算法,它可以用于解决无向图的最小生成树问题。 Prim算法的主要思想是,从某个起始点开始,逐步添加边,直到所有顶点都被连接。 在...
使用Prim算法编写的最小生成树(C语言),为更好地学习数据结构
### 最小生成树与Prim算法(邻接矩阵实现) #### 一、最小生成树概念 在图论中,一个无向图的生成树是该图的一个无环子图,且包含图中的所有顶点。若该图是有权图,则生成树上的边也带有相应的权重。最小生成树...
最小生成树(Minimum Spanning Tree, MST)是图论中的一个重要概念,主要应用于网络设计、数据通信等领域,用于寻找连接所有顶点的边的集合,使得这些边的总权重尽可能小。在本压缩包中,提供了基于MATLAB实现的Prim...
图的最小生成树PRIM算法课程设计 本课程设计的主要目的是实现图的最小生成树,使用普里姆算法来实现。普里姆算法是一种常用的图算法,用于寻找无向图中的最小生成树。该算法通过逐个遍历图中的顶点,记录权值最小的...
利用c++编程实现,最小生成树的Prim算法,
prim算法 Kruskal算法分别实现最小生成树
Prim算法是一种有效的解决最小生成树问题的方法,它由捷克数学家Vojtěch Jarník在1930年提出,并由美国计算机科学家Robert C. Prim在1957年独立发现。Prim算法主要用于加权无向图,目标是从图中的一个顶点开始,...
本文将详细介绍两种经典算法来解决最小生成树问题:Prim算法和Kruskal算法,并以C语言实现为例进行讲解。 ### Prim算法 Prim算法是一种贪心算法,其基本思想是从一个初始节点开始,逐步添加最短的边,直到连接到...
Prim算法是一种用于寻找加权图最小生成树的经典算法,由捷克数学家Vojtěch Jarník在1930年提出,并由美国计算机科学家Robert C. Prim在1957年再次独立发现。 Prim算法的基本思想是逐步构建最小生成树,每次从已有...
prim算法的具体实现动画,配合代码帮助理解prim算法!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Prim算法的基本思想是从一个初始顶点开始,逐步构建最小生成树。它每次添加一条与当前生成树连接且权重最小的边,直到所有的顶点都被包含在内。这个过程可以看作是在不断扩展树的边界,确保每一步都是最优的选择。 ...
**Prim算法**是一种用于寻找加权图最小生成树的贪心算法。该算法以一个顶点为起点,逐步添加最短边来扩展生成树。具体步骤如下: 1. **初始化**:选择任意一个顶点作为起点,将该顶点加入到集合U(已加入生成树中的...
### 最小生成树PRIM算法知识点 #### PRIM算法简介 PRIM算法是一种用于寻找加权无向图的最小生成树(Minimum Spanning Tree, MST)的经典算法。该算法由捷克数学家Vojtěch Jarník于1930年首次提出,并在1957年被美国...
最小生成树是图论中的一个重要概念,...在压缩包中的"最小生成树"文件可能包含了Prim算法的源代码实现,可以用来参考和学习。通过阅读和理解这段代码,你可以更好地掌握Prim算法的细节,并能够应用于实际的编程项目中。
java算法分析与设计之最小生成树(prim算法)源代码 算法作为计算机专业学生的必修课,同时也是软件开发过程中必备的编程思想,对学习研究计算机专业意义重大;正因为这门课程难,所以除了相关方面的书籍,网络资源少...
最小生成树的prim算法
基于matlab的最小生成树的prim算法,有详细的解释,可直接运行