山区某乡的6个村之间有山路如图14-32所示,其中的数字标明了各条山路的长度(公里)。
乡政府决定沿山路架设电话线。为实现村村通电话,电话线总长至少为 (23) 公里。
A.11
B.14
C.18
D.33
参考答案:B
解析:
[分析]: 显然,这是求已知图的最小生成树的问题。含有n个顶点的连通图的生成树有n个顶点和n-1条边。对一个带权的图(网),在一棵生成树中,各条边的权值之和称为这棵生成树的代价。其中代价最小的生成树称为最小代价生成树(简称最小生成树)。
MST性质:设G=(V,E)是一个连通网络,U是顶点集V的一个真子集。若(u,v)是G中所有的一个端点在U(u∈U)里、另一个端点不在U(即v∈V-U)里的边中,具有最小权值的一条边,则一定存在G的一棵最小生成树包括此边(u,v)。
求连通的带权无向图的最小代价生成树的算法有普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法。
(1)普里姆算法。设已知G=(V,E)是一个带权连通无向图,顶点V={0,1,2,…,n-1}。设U是构造生成树过程中已被考虑在生成树上的顶点的集合。初始时,U只包含一个出发顶点。设丁是构造生成树过程中已被考虑在生成树上的边的集合,初始时丁为空。如果边(i,j)具有最小代价,且i∈U,j∈V-U,那么最小代价生成树应包含边(i,j)。把j加到U中,把(I,j)加到T中。重复上述过程,直到U等于V为止。这时,T即为要求的最小代价生成树的边的集合。普里姆算法的特点是当前形成的集合丁始终是一棵树。因为每次添加的边是使树中的权尽可能小,因此这是一种贪心策略。普里姆算法的时间复杂度为O(n2),与图中边数无关,所以适合于稠密图。
(2)克鲁斯卡尔算法。克鲁斯卡尔算法的特点是当前形成的集合T除最后的结果外,始终是一个森林。克鲁斯卡尔算法的时间复杂度为O(elog2e),与图中顶点数无关,所以较适合于稀疏图。