首页 > 编程语言 >python | 算法-拓扑排序

python | 算法-拓扑排序

时间:2022-10-20 23:01:14浏览次数:77  
标签:node degree python 拓扑 zero 算法 nodes 排序

写在前面:
我自己用python练习算法与数据结构的典型算法汇总在这里:汇总-算法与数据结构-python版,欢迎翻阅!

1️⃣ 参考链接https://github.com/algorithmzuo/algorithmbasic2020/blob/master/src/class16/Code03_TopologicalOrderBFS.java

2️⃣ 所用例子
image

数据结构

与前章同:python | 算法-图的宽度优先遍历

拓扑排序算法1

# 拓扑排序
class TopologicalOrder:
    def topoSort_bfs(self, graph):
        # 先建立以节点为键值,节点入度为值的映射表
        indegree_map = {}
        zero_degree_nodes = [] # 同时用队列记录下入度为0的节点
        for _, node in graph.nodes.items():
            indegree_map[node] = node.in_num
            if node.in_num == 0:
                zero_degree_nodes.append(node)

        #开始进行拓扑排序,结果保存在数组中
        results = [] # 保存输出的节点的值
        while len(zero_degree_nodes) > 0:
            cur = zero_degree_nodes.pop(0)
            results.append(cur.name)
            for next in cur.nexts:
                indegree_map[next] -= 1
                if indegree_map[next] == 0:
                    zero_degree_nodes.append(next)
        # 返回值就是目标数组
        return results

# test
matrix = [[0, 0, 1],
          [0, 0, 2],
          [0, 0, 3],
          [0, 1, 4],
          [0, 2, 4],
          [0, 2, 5],
          [0, 3, 4],
          [0, 3, 5]]
generator = GraphGenerator()
graph = generator.createGraph(matrix)

topo_sort = TopologicalOrder()
sort_result = topo_sort.topoSort_bfs(graph)
print(str(sort_result))
# 输出
# [0, 1, 2, 3, 4, 5]

我自己用python练习算法与数据结构的典型算法汇总在这里:汇总-算法与数据结构-python版,欢迎翻阅!

标签:node,degree,python,拓扑,zero,算法,nodes,排序
From: https://www.cnblogs.com/ljdsbfj/p/16811637.html

相关文章

  • Python: Singleton Pattern
    DuSingleton.pyimporthttplib2#https://pypi.org/project/httplib2/importosimportreimportthreadingimporturllibimporturllib.requestfromurllib.parse......
  • 什么 ? 陪玩都月入过忘拉~这不得python采集一下
    前言嗨喽~大家好呀,这里是魔王呐!  国企文员和游戏陪玩两个职业间,你会选择哪个?00后李明的答案是后者。今年3月,某二本院校应届毕业生李明,兜兜转转,没有找到特别合......
  • Python中while与for的嵌套
    1.while语句中嵌套while语句:i=1whilei<10:j=1whilej<=i:print("%d*%d=%-3d"%(i,j,i*j),end="")j=j+1i=i+1print(end="\n")2.while语句......
  • Python: Prototype Pattern
    DuPrototype.pyimportcopy##原型模式PrototypePatternDuPrototype。pyclassSelfReferencingEntity:def__init__(self):self.parent=None......
  • Python学习三天计划-1
    一、第一个Python程序配置好环境变量后打开CMD(命令提示符)程序,输入Python并回车然后,在里面输入代码回车即可立即执行Python解释器的作用是将Python代码翻译成计算机......
  • 2.6 利用Python读写文件中的内容
    #读取文件内容f=open('note.txt','r',encoding='utf-8')#有中文使用encoding='utf-8'text=f.readlines()print(text)f.close()#推荐的使用的方式with...as上下......
  • python内置模块:os、sys、json
    目录一、os模块1os.mkdir()和os.makedirs()创建目录(文件夹)1.mkdir()可以创建单机目录2.makedirs()可以创建单级目录和多级目录2os.rmdir()和os.makedi......
  • Python学习路程——Day19
    Python学习路程——Day19os模块1、os.mkdir() 创建目录(文件夹)'''语法结构: importos os.mkdir() os.makedirs()r的作用是让\起作用'''importosos.mkdir(r......
  • python 图形的数据处理 (折线图为例)
    1.通过json模块对数据进行处理ab173.com是懒人工具-json在线解析,可以通过他对json数据进行格式化的分析。"""演示可视化需求1:折线图开发"""importjsonfrompyec......
  • python进阶之路18 os、sys、json模块
    os模块与sys模块os模块主要与操作系统打交道sys模块主要与python解释器打交道os模块(重要)os模块主要与代码运行所在的操作系统打交道importos#1.创建目录(......