你如何在python中解决这个图理论握手问题?

时间:2010-05-25 07:07:39

标签: python math graph-theory discrete-mathematics

去年,我以心理学学位毕业,但我也为了好玩而花了不少数学。我最近得到了加里·查特兰德(Gary Chartrand)的“入门图论”(Introductory Graph Theory)这本书,用来重温我的数学并获得一些乐趣。这是我发现的一本练习,我觉得特别迷惑:

  

假设您和您的丈夫上学   与其他三人结婚的派对   夫妇。几次握手   地点。没有人和自己握手   (或她自己)或与他(或她)   配偶,没有人和谁握手   同一个人不止一次。后   所有的握手都完成了,   假设你问每个人,   包括你的丈夫,多少手   他或她已经动摇了。每个人都给了   一个不同的答案。 a)多少只手   你动摇了吗? b)有多少手牌   你老公摇了吗?

现在,我一直在推理这个问题,并尝试绘制可以说明解决方案的示例图表,但我是空手而归。我的逻辑是这样的:图中有8个不同的顶点,其中7个具有不同的度数。因此,度数的值必须为0,1,2,3,4,5,6和x。一对已婚夫妇的度数是(0,6)。由于所有图形都具有偶数个奇数顶点,因此x必须为5,3或1。

你对这个问题的解决方案是什么?而且,如果你能在python中解决它,你会怎么做?

(python is fun.)

干杯。

2 个答案:

答案 0 :(得分:1)

我认为这个邻接表代表了一个解决方案:

1 ->  {}
2 ->  {3, 4, 5, 6, 7, 8}
3 ->  {2, 5, 6, 7, 8}
4 ->  {2}
5 ->  {2, 3, 7, 8}
6 ->  {2, 3}
7 ->  {2, 3, 5}
8 ->  {2, 3, 5}

请注意,每个偶数顶点与顶点结合比自身少一个。你才8岁。

我有点直观的解决方案。想了几分钟,然后意识到每对夫妇必须具有6的合并度才能使其工作。然后才弄清楚它应该如何运作。

史蒂文所说的是,你已经推断出必须有一对度数(0,6)和其他人(1,2,3,4,5,x)。现在考虑通过删除第一对创建的子图。 “丈夫”没有动摇任何人的手,所以他没有任何效果。 “妻子”震撼了所有人,所以你需要从所有其他学位中减去1。因此,您有一个图(0,1,2,3,4,x-1),其中适用相同的规则。从这里开始,你可以使用你用来确定(0,6)对的存在的相同思维过程来找出(1,5)对的存在。它实际上是(0,4),但你需要在最后添加1,因为这是不计算第一对的子图。

继续重复,直到你遇到某个人和x个词,你应该得到x = 3.

答案 1 :(得分:1)

这个问题的好处是,如果你不想,你真的不需要解决图形问题。你其实很亲密。你认为一对夫妻有多重性(6,0)。相对于第一对顶点,其余顶点彼此无差别,并且您对该子图具有相同的规则。所以子图的多重性是0,1,2,3,4,x,并且有一些具有多重性(4,0)。这对夫妇在完整图中有多重性(5,1)。因此,当您迭代整个过程时,您将得出结论,您的夫妻有多重性(6,0),(5,1),(4,2),(3,3)。当然,你必须有多重性x = 3,所以你的丈夫握了3手。