图论算法--最小生成树.pdfVIP

  • 10
  • 0
  • 约1.31万字
  • 约 12页
  • 2019-10-13 发布于湖北
  • 举报
南京外国语学校 史钋镭 最小生成树 一、图的最小生成树 (MST) 树的一个定理:N 个点用N-1条边连接成一个连通块,形成的图形只可能是树,没有别 的可能。 一个有N 个点的图,边一定是大于等于N-1条的。图的最小生成树,就是在这些边中 选择N-1条出来,连接所有的N 个点。这N-1条边的边权之和是所有方案中最小的。 二、最小生成树用来解决什么问题? 就是用来解决如何用最小的 “代价”用N-1条边连接N 个点的问题。 【例01】城市公交网建设问题 【问题描述】 有一张城市地图,图中的顶点为城市,无向边代表两个城市间的连通关系,边上的权为 在这两个城市之间修建高速公路的造价,研究后发现,这个地图有一个特点,即任一对城市 都是连通的。现在的问题是,要修建若干高速公路把所有城市联系起来,问如何设计可使得 工程的总造价最少? 【输入格式】 n (城市数,1 n 100) e (边数) 以下e行,每行3个数i,j,wij,表示在城市i,j 之间修建高速公路的造价。 【输出格式】 n-1行,每行为两个城市的序号,表明这两个城市间建一条高速公路。 【输入样例】 5 8 122 2 59 54 7 4 110 13 12 1 12 第 页 共 页 南京外国语学校 史钋镭 4 36 533 2 3 8 【输出样例】 1 2 2 3 3 4 3 5 方法一:Prim算法 Prim 算法采用与Dijkstra、Bellman-Ford 算法一样的 “蓝白点”思想:白点代表已经进入最 小生成树的点,蓝点代表未进入最小生成树的点。 算法描述: 以1为起点生成最小生成树,min[v]表示蓝点v 与白点相连的最小边权。 MST 表示最小生成树的权值之和。 1 初始化:min[v] ∞(v≠1); min[1] 0;MST 0; 2 for (i 1;i n;i++) //实际程序从第一个点,起点开始 寻找min[u]最小的蓝点u。 将u 标记为白点 MST+ min[u] for 与白点u 相连的所有蓝点v if(w[u][v]min[v]) min[v] w[u][v]; 3 算法结束: MST 即为最小生成树的权值之和 图例 说明 不可选 可选 已选 此为原始的加权连通图。每条 - - - 边一侧的数字代表其权值。 2 12 第 页 共 页 南京外国语学校 史钋镭 顶点D 被任意选为起始点。 顶点A、B、E 和F 通过单条 A, B, 边与D 相连。A 是距离D 最 C,G D E, F

文档评论(0)

1亿VIP精品文档

相关文档