在给定多个顶点的情况下找到所有可能的有向图

时间:2019-07-29 18:51:11

标签: graph graph-theory directed-graph

是否有可能在给定一对顶点以及它们之间存在边的信息的情况下找到所有可能的有向图?例如,如果我们知道带有边对的顶点,例如

1 2
2 3
1 3

可能的有向图将是:

1→2, 2→3, 1→3 
1→2, 2→3, 3→1 
1→2, 3→2, 1→3 
1→2, 3→2, 3→1 
2→1, 2→3, 1→3 
2→1, 2→3, 3→1 
2→1, 3→2, 1→3 
2→1, 3→2, 3→1 

这里使用什么数据结构?什么是工作逻辑?

我当时正在考虑使用邻接矩阵数据结构并计算所有可能的邻接矩阵。每个邻接矩阵将代表一个图形。我们可以根据需要在需要的时候使用该图,例如检查是否存在循环等。

很抱歉,这不仅仅是编程问题,而是更多的讨论,但是可以得到任何帮助

1 个答案:

答案 0 :(得分:1)

您可以维护一个无向图数据结构G,并在知道边(u,v)的存在的情况下工作,这意味着在有向图可能性D的特定实例中仅存在一个有向边。

如果要分别维护所有可能的有向图,则将需要2 ^ m个,其中m是边的数量。如果顶点和边始终是相同的,并且只有方向是不变的,则可以保留2 ^ m个位串,每个长度为m。每个位都有一个0或1,具体取决于它所对应的边(u,v)是u-> v还是v <-u。使用位串来指示上面建议的无向图的方向。您只需要生成所有2 ^ m位字符串。效率不是很高...但是如果需要千方百计,您将无法做得更好。

您可以使用位串来构造有向图。但是,至少在每个“图形”中仅维护一个位字符串,而不是仅通过方向更改来重复整个图形数据结构,这样会提高存储效率。在哈希表中记录位字符串:使用每个边作为键,然后根据方向使用位值0/1。许多可能的有向图D之一的任何图遍历都在无向G上进行。然后在恒定时间内可以检查顶点的入射(无向)边,这些边在D中传出/传入。因此,通过保持只有1个图形对象和1个大小为2 ^ m的哈希表(而不是2 ^ m个图形对象)。