如何创建任意两个相邻顶点之和等于素数的所有不同组合无向图
Posted
技术标签:
【中文标题】如何创建任意两个相邻顶点之和等于素数的所有不同组合无向图【英文标题】:How to create all different combination undirected graphs with sum of any two adjacent vertices equal to prime numbers 【发布时间】:2014-01-04 11:05:57 【问题描述】:。数字集是[1….10]
示例:- 数集 [1...4] 的无向图
1------2 2) 3---2
| | |
| | |
4 3 4
|
|
1
感谢您的帮助。
谢谢。
【问题讨论】:
你说的这个问题没有唯一的解决方案。在这种情况下应该有任何解决方案,所有解决方案......?? @AlexandruBarbarosie 感谢您的回复。我想要所有解决方案(无向图的不同组合)。 我不知道是不是问数学家怎么做,然后尝试编写代码,以防万一在这里问问题,这不是一个更好的主意。 @user3160055 我已经描述了解决您的问题的一般方法。 【参考方案1】:从高层次上看,您的算法如下所示:
-
通过迭代顶点集中的所有不同数字对并测试它们的总和是否为素数,构造所有允许边的集合。
通过获取允许的边集的所有可能子集来构造所有允许的图集。
【讨论】:
【参考方案2】:所有可能的(无向的)边是:
1-2、1-4、1-6、1-10、2-3、2-5、2-9、3-4、3-8、3-10、4-7、4-9 , 5-6, 5-8, 6-7, 7-10, 8-9, 9-10
所有可能的图都是这组边的子集。有 18 条边,所以有 218 个可能的图。
【讨论】:
【参考方案3】:作为一般方法,您可以按如下方式修改您的问题:找到所有可能的素数,这些素数可以作为来自[k..n]
(k<=n
) 的值的总和生成。在找到所有这些组合后,您必须获取这些组合的所有可能子集。因此,您的解决方案将是所有这些子集的集合。
在伪代码中:
步骤1:生成一个 素数Sieve 从k
到(k+n+1)(k+n)/2
的数字(从k
到的所有数字的总和
n
)
第二步:检查每个素数是否可以生成为
你有的数字。存储所有可能的组合。你可以写一个
递归函数来做到这一点。
Step3:找到从组合中生成的集合的所有子集
第二步。
Step4:输出所有这些子集。
【讨论】:
以上是关于如何创建任意两个相邻顶点之和等于素数的所有不同组合无向图的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces 1093D. Beautiful Graph二分图染色+组合数