如何解决如何生成无向图的所有有向排列?
我正在寻找一种从无向模板生成所有可能的有向图的方法。例如,给定这个图“模板”:
我想生成所有这六个定向版本:
换句话说,对于模板中的每条边,为结果边选择 LEFT、RIGHT 或 BOTH 方向。
即使是小图也有大量输出,因为有 3^E 个有效排列(其中 E 是模板图中的边数),但其中许多是重复的(具体来说,它们是自守的到另一个输出)。以这两个为例:
我只需要一个。
我首先很好奇:这个操作有术语吗?这一定是一个正式且易于理解的过程吗?
其次,是否有更有效的算法来生成此列表?我当前的代码(Python、NetworkX,尽管这对问题并不重要)看起来像这样,其中有两件事我不知道不喜欢:
Results := Empty List
T := The Template (Undirected Graph)
For i in range(3^E):
Create an empty directed graph G
convert i to trinary
For each nth edge in T:
If the nth digit of i in trinary is 1:
Add the edge to G as (A,B)
If the nth digit of i in trinary is 2:
Add the edge to G as (B,A)
If the nth digit of i in trinary is 0:
Add the reversed AND forward edges to G
For every graph in Results:
If G is isomorphic to Results,STOP
Add G to Results
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。