<p>用计算机科学的术语来说,这里的图形就是我们所知道的。你的分子被称为“节点”或“顶点”,它们之间的连接被称为“边”。您需要找到氧气和所有其他节点之间的距离。这可以通过所谓的<a href="https://en.wikipedia.org/wiki/Breadth-first_search" rel="nofollow noreferrer">Breadth first search</a>实现(还有其他方法,但我认为这是最容易开始的方法)</p>
<p>我强烈建议您阅读wikipedia页面,但这里有一个适合您的数据结构的python版本:</p>
<pre><code>from collections import deque
def bfs(ls):
root = [a for a,b, *(_) in ls if b == 'O' ][0]
ls[root][4] = 0 # mark oxygen as distance 0
queue = deque([(root,0)])
discovered = set([root])
while queue:
v,d = queue.popleft()
for edge in ls[v][2]:
if edge not in discovered:
discovered.add(edge)
queue.append((edge,d+1))
ls[edge][4] = d+1 # add distance to new atom
</code></pre>
<p>运行方式如下:</p>
<pre><code>bfs(ls)
</code></pre>
<p><code>ls</code>运行后:</p>
<pre><code>[[0, 'C', [1, 2, 3, 4], 'E', 2],
[1, 'C', [0, 5, 6, 7], 'E', 1],
[2, 'H', [0], '-', 3],
[3, 'H', [0], '-', 3],
[4, 'H', [0], '-', 3],
[5, 'H', [1], '-', 2],
[6, 'O', [1], 'X', 0],
[7, 'H', [1], '-', 2]]
</code></pre>
<p>结束说明:您可以利用您的数据结构来避免使用discovered作为单独的变量,但我在这里包含它是为了更符合wiki页面上的伪代码。这样比较python代码和理论就更容易了</p>