如何处理节点不相交路径的编码[关闭]

Posted

技术标签:

【中文标题】如何处理节点不相交路径的编码[关闭]【英文标题】:How to approach coding for node disjoint path [closed] 【发布时间】:2020-10-18 12:10:57 【问题描述】:

我正在尝试解决有向图中节点/顶点路径不相交的问题,并开始了解将节点分别拆分为输入节点和输出节点的想法。我知道了这个想法以及它是如何工作的,所有相关的定理都像门格定理,但我仍然不确定如何以有效的方式对其进行编码。

我应该使用哪种数据结构来拆分顶点并仍然设法平衡时间复杂度?是否存在任何算法来告诉如何处理代码。

请帮助或建议一些适当的链接,这可能会帮助我。

谢谢

【问题讨论】:

Disjoint-set 数据结构? 【参考方案1】:

其实很简单。假设您将图形作为对的边列表 u v 表示从 uv 的边

如果节点不是整数,则已经使用字典/哈希/映射将它们减少为1..n 范围内的整数,其中n 是节点数。

现在我们“拆分”所有节点,对于每个节点 i,它将变为 2 节点 ii+n。其中i 被视为in-nodei+nout-node

现在修改了图形边,对于每条边u --> v,我们改为存储边u+n --> v 我们还添加了从每个节点in-nodeout-node的边,即从节点ii+n

我们可以将infinity 容量分配给所有边,将1 的容量分配给将in-node 连接到out-node

的边

现在可以使用任何最大流算法(Ford-Fulkerson、Edmonds-Karp、Dinic 等)找到从某个节点 st 的节点不相交路径

构建残差网络的伪代码:

n = #nodes

for each node i in 1..n:
   residual_graph.addEdge(i, i+n, capacity=1);
   residual_graph.addEdge(i+n, i, capacity=0);

for each edge (u,v) in graph
  residual_graph.addEdge(u+n, v, capacity=+Infinity);
  residual_graph.addEdge(v, u+n, capacity=0);

【讨论】:

感谢@Photon 的帮助。

以上是关于如何处理节点不相交路径的编码[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何处理大黄蜂表现不佳? [关闭]

如何处理 AWS 中的开发和生产环境? [关闭]

如何处理 Twitter Bootstrap 中的模态关闭事件?

如何处理来自 RoR 申请的信用卡? Stripe 在我的国家/地区不可用[关闭]

应用关闭时如何处理 UNNotificationAction?

如何处理ECHO 处于关闭状态