博客
关于我
Python识别璇玑图中诗的数量
阅读量:559 次
发布时间:2019-03-10

本文共 2758 字,大约阅读时间需要 9 分钟。

一、璇玑图简介

璇玑图的读法有很多,这里我使用七七棋盘格的读法,在璇玑图中分离出一个七七棋盘格,如下表

针对上表所示的七七棋盘格图,在苏蕙璇玑图中,前人们总结了上百种很零碎的读法,让普通读者眼花缭乱。其实,我们可以用一句话就把前人的所有读法涵盖了,即,从这个棋盘格的任何一个“交叉结点字”起,沿任何一条线段阅读,当读完第4条线段时,一首七言四绝诗就诞生了,同时,该诗反序逆读后,也是另一首七言四绝诗!(注1:图3共有25个“交叉结点字”,它们分别是:吏、痞、鸡、戚、隶、婢、妾、姐、妻、妓、姊、弟、爷、爹、娣、蛇、姨、哥、子、鸽、嫡、娌、鹅、媳、蝎。注2:每个“线段”都由8个汉字连接而成,其中顶端的两个汉字就是两个“交叉结点字”)

二、算法实现

我们将上面的表格简化成一张图,如下所示:

代码如下:

class Gragh():    def __init__(self, nodes, sides):        '''        nodes 表示点        sides 表示边        '''        # self.sequense是字典,key是点,value是与key相连接的点        self.sequense = {}        # self.side是临时变量,主要用于保存与指定点相连接的点        self.side = []        for node in nodes:            for side in sides:                u, v = side                # 指定点与另一个点在同一个边中,则说明这个点与指定点是相连接的点,则需要将这个点放到self.side中                if node == u:                    self.side.append(v)                elif node == v:                    self.side.append(u)            self.sequense[node] = self.side  # 统计出各个节点与哪一些节点直接连接            self.side = []	'''	做五个循环,五个点确定四句诗	'''    def search(self):        res = []        for i in range(1, 26):            for j in self.sequense[i]:                for k in self.sequense[j]:                    if k != i:                        for z in self.sequense[k]:                            if z != j:                                for y in self.sequense[z]:                                    if y != k:                                        a = [i, j, k, z, y]                                        if a not in res:                                            res.append(a)        return resif __name__ == "__main__":    nodes = [i + 1 for i in range(25)]    sides = [(1, 2), (2, 3), (3, 4), (4, 5), (1, 6), (1, 7), (2, 7), (3, 8), (4, 9), (5, 10), (5, 9), (6, 7),(7, 8), (8, 9), (9, 10), (6, 11), (7, 12), (7, 13), (8, 13), (9, 13),(9, 14), (10, 15), (11, 12), (12, 13), (13, 14), (14, 15), (11, 16), (12, 17), (13, 18), (13, 17),(13, 19), (14, 19), (15, 20), (16, 17), (17, 18), (18, 19), (19, 20), (16, 21), (17, 21), (17, 22),(18, 23), (19, 24), (19, 25), (20, 25), (21, 22), (22, 23), (23, 24), (24, 25)]    G = Gragh(nodes, sides)    print(len(G.search()))

运行结果

转载地址:http://mtwvz.baihongyu.com/

你可能感兴趣的文章
spring-day01
查看>>
spring的值注入与组件扫描
查看>>
【leetcode】349. 两个数组的交集(intersection-of-two-arrays)(哈希)[简单]
查看>>
C#跨窗体程序调用方法的具体操作
查看>>
C#中创建Android项目
查看>>
C#使用OpenCV(OpenCVSharp)
查看>>
统计学之变异系数与是非标志
查看>>
统计学之偏度系数和峰度系数
查看>>
力扣数据库:删除重复的电子邮箱
查看>>
leetcode 102 剑指Offer 32 二叉树的层次遍历
查看>>
关于继承的一些基本知识
查看>>
如何批量下载新浪微博相册,一键下载微博相册原图
查看>>
抖音发布黄金时间段,抖音上热门最佳时间
查看>>
小米有品的手机详情图怎么保存,如何把小米有品商品详情图保存
查看>>
我的图床~
查看>>
MySQL 实战 45 讲笔记 | 事务隔离和 MVCC
查看>>
自学C++编程,掌握这三项技能就可以工作了
查看>>
HTTP 常见状态码
查看>>
Thymeleaf sec:authorize 标签不生效
查看>>
js回车键登录
查看>>