首页 > 解决方案 > 如何使用python3收集所有链

问题描述

背景:

我正在做聚合物模拟。我试图用它networkx来计算系统中有多少条链。系统内部的分子等于节点,键等于节点之间的连接。

我试过的:

我用来networkx.chain_decompostion计算链条的数量。

import networkx as nx
info = nx.chain_decomposition(G)

问题:

我发现它只能找到闭环的链,例如A1-A2-A3-A1.

但是,仍然有很多连锁店没有关闭,比如A1-A2-A3.

有没有一种简单的方法来收集这两种类型的链条。谢谢!

标签: python-3.xnetworkx

解决方案


功能chain_decomposition不是你想象的那样。从文档:

关于深度优先搜索树的图的链式分解是一组循环或路径,这些循环或路径源自树的一组基本循环 [...]

您可能正在寻找的是 function number_connected_components。有关详细信息,请参阅此链接。这假设每个连接的组件都是一个链,即图 G 中有几个不相交的子图,每个子图对应于一个(非分支)聚合物分子。如果不是这种情况(聚合物是支化的),那么我需要做一些更聪明的事情。例如,您可以计算离开节点(具有单键的原子)之间的所有最短路径。您可以通过检查节点的度数来找到叶子节点list(G.degree)(叶子的度数为 1),然后计算所有叶子对之间的最短路径all_shortest_paths。要找到环状分子,您可以chain_decomposition像以前一样使用。


推荐阅读