如何正确计算4对夫妇的座位数?
4对夫妇围坐在一张圆桌旁,他们的丈夫和妻子不能相邻。有多少种不同的座位安排?尽尽尽尽尽可能多的简单计算。W[a\,h[a\],___})])//长度1如果可以的话,尽可能
解答动态
借用JimB comment填充所有可能的解决方案,1] 选择两个相邻的座位,包括起始座位和结束座位案例:
ps=Join[{-1},#]amp;]](*Output Length:1488*) 如果一对夫妇坐在一起,那么他们的和将为零(一个是$n$,另一个是$n)$-n$),所以我们删除这些案例。
对于可视化,可以使用CirC点:
图纸[l?]:=图形[{Circle[],MapIndexed[{白色,EdgeForm[Black],磁盘[?,.2],黑色,文本[l[?2[[1]]]],?1]}gt;下标[{quot;,quot;}[[符号@x]], 绝对值@x]]&;/@RandomSample[result,3]
很抱歉,这是一个混乱的过程,但要使代码变得漂亮需要很多时间。不管怎样,satisfibilitycount/satisfibilityinstances是这一切的核心。这种方法可以推广到比圆桌会议等更复杂的问题,但当然需要对这些问题进行不同的可视化处理展平@连接[(*固定一个人的位置。*){s[1,1,1]},(*每个座位正好一个人。*)表[BooleanCountingFunction[{1},couples genders]@@展平@桌子[s[i,j,k],{j,couples},{k,genders}],{i,seats}],(*每个人正好有一个实例。*)Table[BooleanCountingFunction[{1},seats]@[Table[s[i,j,k],{i,seats}],{j,couples},{k,genders}],(*每个相邻的座位最多只能有一个人来自一对夫妇。*)表[BooleanCountingFunction[1,2 genders]@@展平@桌子[s[i,j,k],{i,{k,genders},{j,couples}]amp;@@@循环图边缘列表[座位]]//(*选择正确的变量(座位、夫妇、性别)。*)使用[{vars=展平@桌子[s[i,j,k],{i,seats},{j,couples},{k,genders}]},Pick[vars,#]amp;]},(*绘制一个夫妻座位图样本。*)有[{samples=UpTo[20],perrow=UpTo[4]},(Graphics[{Circle[],Table[With[{pp={Sin[#],Cos[#]}amp;/@pp}]gt;{s,g}]][[All,1]],{i,couples}]}]&;/@RandomSample[sols,samples])//GraphicsGrid@分区
通过对问题添加以下约束,我们可以发现只有12种解决方案,其中性别在桌子周围交替(奇数座位必须有女性,即使座位是男性):
(*性别必须交替。*)Table[Or@@Table[s[i,j,Mod[i,2,1]],{j,couples}],{i,seats}],
couples=Partition[Range@8,2] {1,2},{3,4},{5,6},{7,8} pairs=DeleteCases[Alternatives@@couples]@Subsets[Range[8],{2}];hamiltoniancycles=FindHamiltonianCycle[pairs,All];Length@hamiltoniancycles 744 RandomSample[hamiltoniancycles,5] //Column
Multicolumn[Graph[#,VertexLabels-quot;Namegt;Large,VertexStyle-amp;,couples]]gt;(Placed[#,Center]amp;,couples]);多列[Graph[#,VertexLabels-gt;Small,VertexSize-gt;200,VertexStyle-amp;,couples]&;/@RandomSample[hamiltoniancycles,16] ,4]
couples=Graph[Array[h[#]gt;w[#]gt;Placed[自动,居中],VertexSize->;0.75]
- End
免责声明:
本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。