这可能是一个奇怪的练习,因为我谈论的是要指定的有限数量的边,这就引出了一个问题:为什么不直接把它们写下来呢?然而,我被要求使用一个集合构建器符号来描述柏拉图立体-在我的例子中,我使用顶点或节点来表示它们的面,以及它们的边-我只做对了其中的四个:
tetrahedron = [(j,i) | i <- [1..4], j <- [1..i], i/=j]
cube = [(j,i) | i <- [1..6], j <- [1..i], i/=j, i+j/=7]
octahedron = [(j,i) | i <- [1..8], j <- [1..i], k <- [3,7,9,11,15], i/=j, i+j==k]
dodecahedron = [(j,i) | i <- [1..12], j <- [1..i], k <- [3,4,5,8,12,13,15,16,17,20], i/=j, i+j==k, i-j/=6]
字符串
四面体和4个顶点的完全图是一样的,立方体的构造产生了比必要的更多的边,那些顶点加起来是7的,这样我就可以排除它们,而八面体是一种情况,它们必须加起来是指定的奇数。十二面体很难,但我想我必须创建一个例外,这是顶点数之间的差6。
有没有可能以同样的方式创建一个二十面体图?有没有数学说,这是不可能的,否则?
1条答案
按热度按时间oxiaedzo1#
可以在generalized LCF notation中指定Hamilton图。你绕着一个Hamilton圈走,从0开始依次给顶点编号。每个节点显然与一个高一个低一个的节点相邻; GLCF表示法将“丢失”的边缘作为偏移量,以及应该复制这些偏移量的次数。GLCF的示例是[(-4,-3,4),(-2,2,3)]6.这意味着第一个顶点在循环中被连接到它后面的4个顶点,后面的3个顶点,前面的4个顶点;第二个顶点在循环中被连接到它后面的2个顶点,前面的2个顶点,前面的3个顶点;然后我们重复六次,所以第三个顶点再次被连接到后面的4个顶点,后面的3个顶点,前面的4个顶点;第四个是2后面,2前面,3前面;等等,直到第十二个和最后一个节点。
我们可以使用列表解析语法将GLCF表示法转换为邻接列表:
字符串
在许多情况下,每个节点都有一条缺失的边。然后习惯上从GLCF的元组中删除括号,这种缩写形式称为LCF符号。我们可以在Haskell中进行类似的区分:
型
MathWorld为大多数柏拉图图提供了GLCF符号;查看this page以获得对每个柏拉图图的描述链接。奇怪的是,它没有列出八面体图的版本。我不知道为什么,因为很容易从它的各种图形渲染中看出它应该是什么。我们可以直接导入其他图形:
型