跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Ford-Fulkerson算法
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
== 算法步骤 == Ford-Fulkerson算法的伪代码如下: <syntaxhighlight lang="python"> def ford_fulkerson(graph, source, sink): # 初始化流量为0 max_flow = 0 # 构建残量网络 residual_graph = {u: {v: graph[u][v] for v in graph[u]} for u in graph} # 使用BFS寻找增广路径 def bfs(residual_graph, source, sink, parent): visited = {u: False for u in residual_graph} queue = [source] visited[source] = True while queue: u = queue.pop(0) for v in residual_graph[u]: if not visited[v] and residual_graph[u][v] > 0: queue.append(v) visited[v] = True parent[v] = u if v == sink: return True return False parent = {u: -1 for u in residual_graph} # 不断寻找增广路径并更新流量 while bfs(residual_graph, source, sink, parent): path_flow = float('inf') v = sink # 计算增广路径上的最小残量 while v != source: u = parent[v] path_flow = min(path_flow, residual_graph[u][v]) v = u # 更新残量网络 v = sink while v != source: u = parent[v] residual_graph[u][v] -= path_flow residual_graph[v][u] += path_flow v = u max_flow += path_flow return max_flow </syntaxhighlight> === 输入与输出示例 === 假设有以下网络流图(用邻接矩阵表示): <syntaxhighlight lang="python"> graph = { 's': {'a': 10, 'b': 5}, 'a': {'b': 2, 'c': 4, 'd': 8}, 'b': {'d': 9}, 'c': {'t': 10}, 'd': {'c': 6, 't': 10}, 't': {} } </syntaxhighlight> 运行 `ford_fulkerson(graph, 's', 't')` 后,输出最大流为: <syntaxhighlight lang="text"> 19 </syntaxhighlight>
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)