热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2020数据结构小学期(四)——Prim算法

4、Prim算法输入:无向图(顶点序列,边序列)功能要求:输出最小生成树的各组成边及最小生成树的权值源码:1importnumpyasnp234classMinTree(objec

4、Prim算法

输入:无向图(顶点序列,边序列)

功能要求:输出最小生成树的各组成边及最小生成树的权值

 

源码:


1 import numpy as np
2
3
4 class MinTree(object):
5 def create_graph(self, graph, vertex: int, data: [], weight: []):
6 for i in range(vertex):
7 graph.data[i] = data[i]
8 for j in range(vertex):
9 graph.weight[i][j] = weight[i][j]
10
11 def show_graph(self, graph):
12 for link in graph.weight:
13 print(link)
14
15 def prim_algorithm(self, graph, v: int):
16 total = 0
17 visited = [0] * graph.vertex
18 visited[v] = 1
19 h1 = -1
20 h2 = -1
21 min_weight = 10000
22 for k in range(1, graph.vertex):
23 for i in range(graph.vertex):
24 for j in range(graph.vertex):
25 if visited[i] == 1 and visited[j] == 0 and graph.weight[i][j] < min_weight:
26 min_weight = graph.weight[i][j]
27 h1 = i
28 h2 = j
29 print(边 %s -> %s 权值: %d % (graph.data[h1], graph.data[h2], min_weight))
30 total += min_weight
31 visited[h2] = 1
32 min_weight = 10000
33 print(最小生成树的权值: , total)
34
35
36 class MGraph(object):
37 def __init__(self, vertex):
38 self.vertex = vertex
39 self.data = vertex * [0]
40 self.weight = [[0 for row in range(vertex)] for col in range(vertex)]
41
42
43 if __name__ == __main__:
44 """
45 vertex_data = [‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘, ‘G‘]
46 weights = [[10000, 5, 7, 10000, 10000, 10000, 2],
47 [5, 10000, 10000, 9, 10000, 10000, 3],
48 [7, 10000, 10000, 10000, 8, 10000, 10000],
49 [10000, 9, 10000, 10000, 10000, 4, 10000],
50 [10000, 10000, 8, 10000, 10000, 5, 4],
51 [10000, 10000, 10000, 4, 5, 10000, 6],
52 [2, 3, 10000, 10000, 4, 6, 10000]]
53 """
54
55 vertex_str = input("请输入顶点序列(以空格分隔):")
56 vertex_list = vertex_str.split(" ")
57 vertex_data = [char for char in vertex_list]
58 weight_str = input("请输入边序列(以空格分隔):")
59 weight_list = weight_str.split(" ")
60 weight_list = list(map(int, weight_list))
61 weight_list = np.array(weight_list)
62 weights = weight_list.reshape(len(vertex_data), len(vertex_data))
63 g = MGraph(len(vertex_data))
64 tree = MinTree()
65 tree.create_graph(g, len(vertex_data), vertex_data, weights)
66 tree.show_graph(g)
67 tree.prim_algorithm(g, 0)

 


推荐阅读
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
  • 在 LeetCode 的“有效回文串 II”问题中,给定一个非空字符串 `s`,允许删除最多一个字符。本篇深入解析了如何判断删除一个字符后,字符串是否能成为回文串,并提出了高效的优化算法。通过详细的分析和代码实现,本文提供了多种解决方案,帮助读者更好地理解和应用这一算法。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本题主要考察二维数组的遍历和重塑。通过将二维数组降为一维,再根据新的行数和列数重新构建矩阵。 ... [详细]
  • [c++基础]STL
    cppfig15_10.cppincludeincludeusingnamespacestd;templatevoidprintVector(constvector&integer ... [详细]
  • 双指针法在链表问题中应用广泛,能够高效解决多种经典问题,如合并两个有序链表、合并多个有序链表、查找倒数第k个节点等。本文将详细介绍这些应用场景及其解决方案。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • Spark中使用map或flatMap将DataSet[A]转换为DataSet[B]时Schema变为Binary的问题及解决方案
    本文探讨了在使用Spark的map或flatMap算子将一个数据集转换为另一个数据集时,遇到的Schema变为Binary的问题,并提供了详细的解决方案。 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
author-avatar
超可爱萌地1983
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有