Python识别璇玑图中诗的数量

系统 1542 0

Python识别璇玑图中诗的数量

一、璇玑图简介

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

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

二、算法实现

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

Python识别璇玑图中诗的数量_第1张图片

代码如下:

            
              
                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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论