摘要: #!/usr/bin/env python3.3# -*- coding:utf-8 -*-# Copyright 2013'''最大流:沿增广路径反复增加流,直到找不到增广路径1)残留网络:Gf由可以容纳更多网络流的边所组成2)增广路径:为残留网络Gf上从s到t的一条简单路径p,其中p中所的边的最小权值为该增广路径的残留容量3)最大流最小割:对G的某个割(S,T),有|f|=c(S,T)'''def edmonds_karp(graph, graph_size, s, t): # 初始化所有边的流 flow = [[0] * graph_siz 阅读全文
posted @ 2013-04-30 01:36 Leung文 阅读(172) 评论(0) 推荐(0) 编辑
摘要: #!/usr/bin/env python3.3# -*- coding:utf-8 -*-# Copyright 2013'''单源最短路径:1)bellman_ford算法:将所有的边进行|V|-1次循环,每次循环对所有边进行松弛操作2)dijkstra算法:将V-S中顶点按最短路径递增的次序加入到S中,并对邻接边进行松弛操作'''def bellman_ford(graph, graph_size, s): low_weight = [w for w in graph[0]] low_weight[s] = 0 for repeat in 阅读全文
posted @ 2013-04-30 01:15 Leung文 阅读(191) 评论(0) 推荐(0) 编辑
摘要: #!/usr/bin/env python3.3# -*- coding:utf-8 -*-# Copyright 2013'''无向图最小生成树:1)kruskal算法:将所有的边按权值从小到大排序,顺序遍历把两个顶点不在同一个连通分量的边添加到最小生成树2)Prim算法:从单一顶点开始,逐条添加连接最小生成树与一个不在树中的顶点的最小权边'''def mst_kruskal(graph, graph_size): # 并查集 ufs = UnionFindSet() for v in range(graph_size): ufs.make_s 阅读全文
posted @ 2013-04-30 00:57 Leung文 阅读(186) 评论(0) 推荐(0) 编辑
摘要: #!/usr/bin/env python3.3# -*- coding:utf-8 -*-# Copyright 2013def topological_sort(graph, graph_size): topo_list = [] indegree = {v: 0 for v in range(graph_size)} # 初始化每个顶点的入度 for u in range(graph_size): for v in range(graph_size): if graph[u][v] is not None: ... 阅读全文
posted @ 2013-04-30 00:28 Leung文 阅读(153) 评论(0) 推荐(0) 编辑