`
cm14k
  • 浏览: 31420 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

最小生成树之Prim算法

阅读更多

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算法代码代码 最小...

    POJ 1789 最小生成树之prim算法

    标题中的“POJ 1789 最小生成树之prim算法”指的是一个在线编程竞赛题目,来源于普林斯顿开放在线课程(POJ)平台。该题目要求参赛者实现Prim算法,这是一种解决图论问题中寻找最小生成树的经典算法。最小生成树是在...

    最小生成树_Prim算法实现C++

    最小生成树_Prim算法实现C++ 在计算机科学中,Prim算法是一种常用的最小生成树算法,它可以用于解决无向图的最小生成树问题。 Prim算法的主要思想是,从某个起始点开始,逐步添加边,直到所有顶点都被连接。 在...

    最小生成树(Prim算法)

    使用Prim算法编写的最小生成树(C语言),为更好地学习数据结构

    最小生成树,Prim算法的使用(邻接矩阵实现).txt

    ### 最小生成树与Prim算法(邻接矩阵实现) #### 一、最小生成树概念 在图论中,一个无向图的生成树是该图的一个无环子图,且包含图中的所有顶点。若该图是有权图,则生成树上的边也带有相应的权重。最小生成树...

    基于MATLAB的最小生成树Prim算法 源代码程序.rar

    最小生成树(Minimum Spanning Tree, MST)是图论中的一个重要概念,主要应用于网络设计、数据通信等领域,用于寻找连接所有顶点的边的集合,使得这些边的总权重尽可能小。在本压缩包中,提供了基于MATLAB实现的Prim...

    图的最小生成树PRIM算法课程设计

    图的最小生成树PRIM算法课程设计 本课程设计的主要目的是实现图的最小生成树,使用普里姆算法来实现。普里姆算法是一种常用的图算法,用于寻找无向图中的最小生成树。该算法通过逐个遍历图中的顶点,记录权值最小的...

    最小生成树-Prim算法

    利用c++编程实现,最小生成树的Prim算法,

    最小生成树 prim算法和Kruskal算法实现

    prim算法 Kruskal算法分别实现最小生成树

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

    Prim算法是一种有效的解决最小生成树问题的方法,它由捷克数学家Vojtěch Jarník在1930年提出,并由美国计算机科学家Robert C. Prim在1957年独立发现。Prim算法主要用于加权无向图,目标是从图中的一个顶点开始,...

    cpp-图论算法最小生成树Prim算法和Kruskal算法C实现

    本文将详细介绍两种经典算法来解决最小生成树问题:Prim算法和Kruskal算法,并以C语言实现为例进行讲解。 ### Prim算法 Prim算法是一种贪心算法,其基本思想是从一个初始节点开始,逐步添加最短的边,直到连接到...

    最小生成树prim算法

    Prim算法是一种用于寻找加权图最小生成树的经典算法,由捷克数学家Vojtěch Jarník在1930年提出,并由美国计算机科学家Robert C. Prim在1957年再次独立发现。 Prim算法的基本思想是逐步构建最小生成树,每次从已有...

    最小生成树之prim算法.swf

    prim算法的具体实现动画,配合代码帮助理解prim算法!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    用于计算最小生成树的Prim算法

    Prim算法的基本思想是从一个初始顶点开始,逐步构建最小生成树。它每次添加一条与当前生成树连接且权重最小的边,直到所有的顶点都被包含在内。这个过程可以看作是在不断扩展树的边界,确保每一步都是最优的选择。 ...

    用Prim和Kruskal算法构造最小生成树

    **Prim算法**是一种用于寻找加权图最小生成树的贪心算法。该算法以一个顶点为起点,逐步添加最短边来扩展生成树。具体步骤如下: 1. **初始化**:选择任意一个顶点作为起点,将该顶点加入到集合U(已加入生成树中的...

    最小生成树PRIM算法

    ### 最小生成树PRIM算法知识点 #### PRIM算法简介 PRIM算法是一种用于寻找加权无向图的最小生成树(Minimum Spanning Tree, MST)的经典算法。该算法由捷克数学家Vojtěch Jarník于1930年首次提出,并在1957年被美国...

    最小生成树Prim算法

    最小生成树是图论中的一个重要概念,...在压缩包中的"最小生成树"文件可能包含了Prim算法的源代码实现,可以用来参考和学习。通过阅读和理解这段代码,你可以更好地掌握Prim算法的细节,并能够应用于实际的编程项目中。

    java算法分析与设计之最小生成树(prim算法)源代码

    java算法分析与设计之最小生成树(prim算法)源代码 算法作为计算机专业学生的必修课,同时也是软件开发过程中必备的编程思想,对学习研究计算机专业意义重大;正因为这门课程难,所以除了相关方面的书籍,网络资源少...

    最小生成树 Prim算法

    最小生成树的prim算法

    基于matlab的最小生成树prim算法

    基于matlab的最小生成树的prim算法,有详细的解释,可直接运行

Global site tag (gtag.js) - Google Analytics