佛山网站建设专业苏州工程网站建设
佛山网站建设专业,苏州工程网站建设,用WordPress建什么站好,网站建设信息推荐Vojtěch Jarnk
一、Prim算法简史
Prim算法#xff08;普里姆算法#xff09;#xff0c;是1930年捷克数学家算法沃伊捷赫亚尔尼克#xff08;Vojtěch Jarnk#xff09;最早设计#xff1b; 1957年#xff0c;由美国计算机科学家罗伯特普里姆独立实现#xff1b; 19… Vojtěch Jarník
一、Prim算法简史
Prim算法普里姆算法是1930年捷克数学家算法沃伊捷赫·亚尔尼克Vojtěch Jarník最早设计 1957年由美国计算机科学家罗伯特·普里姆独立实现 1959年艾兹格·迪科斯彻再次发现了该算法。
二、Prim算法思路 将点分为两拨1已经加入最小生成树的和2未加入的。找到未加入中距离集合最近的点添加该点修改其它点到集合的距离。直到所有结点都加入到最小生成树。Prim算法与Dijkstra算法都是贪心算法适用于稠密图时间复杂度都是OV^2也可以进行优化其时间复杂度与边数无关。
三、Prim算法描述 1以某一个点A开始将此点加入集合U并访问其所有经过此点的边。 2在这些边寻找权重最小的边并且要求它的另一个点B没有被访问过。如果 能找到就将点B加入集合U。接着我们要访问所有经过点A或点B的边。 3重复2的过程直到所有的点都加入U。 4此时由所有边构成的树即为最小生成树。 四、Prim算法源代码 核心代码部分
1 文本格式
using System; using System.Collections; using System.Collections.Generic;
namespace Legalsoft.Truffer.Algorithm { /// summary /// Prim 算法(邻接矩阵表示的简单实现) /// /summary public class MST_Prim_Algorithm { private static bool IsValidEdge(int u, int v, bool[] inMST) { if (u v) { return false; } if (inMST[u] false inMST[v] false) { return false; } else if (inMST[u] true inMST[v] true) { return false; } return true; } public static int Execute(Undirected_Graph graph, out ListWeightEdge tree) { tree new ListWeightEdge(); int V graph.Vertex_Number; int[,] Cost graph.To_Adjacency_Matrix(); bool[] inMST new bool[V]; inMST[0] true; int edge_count 0; int mincost 0; while (edge_count V - 1) { int min Int32.MaxValue; int a -1; int b -1; for (int i 0; i V; i) { for (int j 0; j V; j) { if (Cost[i, j] min) { if (IsValidEdge(i, j, inMST)) { min Cost[i, j]; a i; b j; } } } } if (a ! -1 b ! -1) { tree.Add(new WeightEdge(a,b,min)); edge_count; mincost mincost min; inMST[b] inMST[a] true; } } return mincost; } } } 2 代码格式
using System;
using System.Collections;
using System.Collections.Generic;namespace Legalsoft.Truffer.Algorithm
{/// summary/// Prim 算法(邻接矩阵表示的简单实现)/// /summarypublic class MST_Prim_Algorithm{private static bool IsValidEdge(int u, int v, bool[] inMST){if (u v){return false;}if (inMST[u] false inMST[v] false){return false;}else if (inMST[u] true inMST[v] true){return false;}return true;}public static int Execute(Undirected_Graph graph, out ListWeightEdge tree){tree new ListWeightEdge();int V graph.Vertex_Number;int[,] Cost graph.To_Adjacency_Matrix();bool[] inMST new bool[V];inMST[0] true;int edge_count 0;int mincost 0;while (edge_count V - 1){int min Int32.MaxValue;int a -1;int b -1;for (int i 0; i V; i){for (int j 0; j V; j){if (Cost[i, j] min){if (IsValidEdge(i, j, inMST)){min Cost[i, j];a i;b j;}}}}if (a ! -1 b ! -1){tree.Add(new WeightEdge(a,b,min));edge_count;mincost mincost min;inMST[b] inMST[a] true;}}return mincost;}}
} ——————————————————————
POWER BY 315SOFT.COM TRUFFER.CN
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/88745.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!