[算法导论]拓扑排序 @ Python
2024-08-26 21:47:51
class Graph:
def __init__(self):
self.V = [] class Vertex:
def __init__(self, x):
self.key = x
self.color = 'white'
self.d = 10000
self.f = 10000
self.pi = None
self.adj = []
self.next = None class Solution:
def Dfs(self, G):
for u in G.V:
u.color = 'white'
u.pi = None
global time
time = 0
for u in G.V:
if u.color == 'white':
self.DfsVisit(G, u) def DfsVisit(self, G, u):
global time
time = time + 1
u.d = time
u.color = 'gray'
for v in u.adj:
if v.color == 'white':
self.DfsVisit(G, v)
v.pi = u
u.color = 'black'
time = time + 1
u.f = time def TopologicalSort(self, G):
LinkedList = Vertex('#')
self.Dfs(G)
G.V.sort(key=lambda v:v.f)
for v in G.V:
v.next = LinkedList.next
LinkedList.next = v
return LinkedList if __name__ == '__main__':
undershorts = Vertex('undershorts')
socks = Vertex('socks')
pants = Vertex('pants')
shoes = Vertex('shoes')
belt = Vertex('belt')
shirt = Vertex('shirt')
tie = Vertex('tie')
jacket = Vertex('jacket')
watch = Vertex('watch') undershorts.adj = [pants, shoes]
socks.adj = [shoes]
pants.adj = [belt, shoes]
shoes.adj = []
belt.adj = [jacket]
shirt.adj = [belt, tie]
tie.adj = [jacket]
jacket.adj = []
watch.adj = [] G = Graph()
G.V = [undershorts,socks,pants,shoes,belt,shirt,tie,jacket,watch] m = Solution()
Sort_List = m.TopologicalSort(G)
p = Sort_List
while p.next != None:
print p.next.key, p.next.f
p = p.next
最新文章
- angular1.x的简单介绍(二)
- java入门第三步之数据库连接
- java异常
- [PHP]基本排序(冒泡排序、快速排序、选择排序、插入排序、二分法排序)
- nginx 域名绑定端
- CentOS7 安装 net-speeder 提升 VPS 网络性能
- iOS 学习 - 15.添加水印
- azure之MSSQL服务性能测试
- SUSE Linux实现局域网时间同步
- DBS小结
- oracle scn浅析
- Java基础知识二次学习-- 第一章 java基础
- ------ Tor(洋葱路由器)匿名网络源码分析——主程序入口点(一)------
- mariadb插入中文数据乱码解决过程
- Mybatis学习---连接MySQL数据库
- Lloyd’s 算法 和 K-Means算法
- Spring Security(二十五):7. Sample Applications
- python pandas模块,nba数据处理(1)
- 改变dos的编码方式
- luogu [TJOI2007]线段
热门文章
- [学习笔记] 七步从AngularJS菜鸟到专家(4和5):指令和表达式 [转]
- 打印出所有的";水仙花数";,所谓";水仙花数";是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个";水仙花数";,因为153=1的三次方+5的三次方+3的三次方。
- sql行列转换
- Android Studio项目结构
- java反射保存
- Linux下Tomcat重新启动
- 我的Win32开发抉择,Delphi老将复出
- MVC中使用RazorPDF创建PDF
- django CSRF token missing or incorrect
- NODE-WEBKIT教程(12)全屏