• Python识别璇玑图中诗的数量


    一、璇玑图简介

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

    针对上表所示的七七棋盘格图,在苏蕙璇玑图中,前人们总结了上百种很零碎的读法,让普通读者眼花缭乱。其实,我们可以用一句话就把前人的所有读法涵盖了,即,从这个棋盘格的任何一个“交叉结点字”起,沿任何一条线段阅读,当读完第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 res
    
    if __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()))
    

    运行结果

    1558419864630

    我不管,JS天下第一
  • 相关阅读:
    HDU——T 3342 Legal or Not
    Web框架本质
    February 5 2017 Week 6 Sunday
    February 4 2017 Week 5 Saturday
    February 3 2017 Week 5 Friday
    February 2 2017 Week 5 Thursday
    February 1 2017 Week 5 Wednesday
    January 31 2017 Week 5 Tuesday
    January 30 2017 Week 5 Monday
    January 29 2017 Week 5 Sunday
  • 原文地址:https://www.cnblogs.com/Jacob98/p/11250665.html
Copyright © 2020-2023  润新知