我实际上有一个 cif 格式的分子。我不认为格式真的很重要,但提供给有兴趣的人。这个文件里面有很多数据。最重要的是(因为文件的这一部分实际上将分子描述为图形)是这一部分:
017 N1 C2 SING N N 1
017 N1 H11 SING N N 2
017 N1 H12 SING N N 3
017 C2 C3 DOUB Y N 4
017 C2 C7 SING Y N 5
017 C3 C4 SING Y N 6
这不是整个文件,它只是一个示例。该分子可能包含许多环状结构。我可以通过第 6 列中的 Y 标志来定义芳香的。但也有其他的周期,可以是安静的不同:或像那样
或那样:
。甚至这样的:
我需要以这样一种方式提取所有循环,如果两个循环共享键,就像在第一个示例中一样,它们被视为一个循环。Tarjan 的算法在这里不起作用,因为它只运行每个节点一次。那么我该怎么做呢?请提供尽可能详细的信息。我对诸如 OpenBabel 之类的库不是很感兴趣,因为我打算用 Swift 编写东西并使用 cif 文件中的图形描述。