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()))
运行结果

Python识别璇玑图中诗的数量的更多相关文章
- python matplotlib给图中的点加标签
在写论文用到matplotlib画散点图,想着如果能把每个点对应的ID打在点的旁边就好了,经过一番搜索,最后找到了方法. 首先是打点,先把所有的点画好,举例如下: p1 = ax.scatter(X[ ...
- Python使用tesserocr识别文字过程中遇到的一个问题
最近在使用Python识别PNG图像中包含的文字时遇到一个问题.解决过程记录如下. (Python使用tesserocr的安装过程不再描述.) 在使用tesserocr识别PNG图像中的文字时,如果P ...
- python—networkx:在一张图中画出多个子图
通过plt.subplot能够在一张图中画出多个子图 #coding: utf-8 #!/usr/bin/env python """ Draw a graph with ...
- [hdu2460]network(依次连边并询问图中割边数量) tarjan边双联通分量+lca
题意: 给定一个n个点m条边的无向图,q个操作,每个操作给(x,y)连边并询问此时图中的割边有多少条.(连上的边会一直存在) n<=1e5,m<=2*10^5,q<=1e3,多组数据 ...
- python利用dijkstra算法求解图中最短距离
利用dijkstra算法,来完成图中两个顶点间最短的距离,可以直接复制使用,只需要修改参数即可 def dijkstra_raw(edges, from_node, to_node): "& ...
- 使用DeepWalk从图中提取特征
目录 数据的图示 不同类型的基于图的特征 节点属性 局部结构特征 节点嵌入 DeepWalk简介 在Python中实施DeepWalk以查找相似的Wikipedia页面 数据的图示 当你想到" ...
- 如何用python搞定验证码中的噪点
背景:朋友在为"关山口男子职业技术学校"写一款校园应用,于是找MoonXue写一个学生选课系统的登录接口.为了搞定这个接口,不得不先搞定这个系统的验证码. 验证码大概是这个样子 看 ...
- Python识别网站验证码
http://drops.wooyun.org/tips/6313 Python识别网站验证码 Manning · 2015/05/28 10:57 0x00 识别涉及技术 验证码识别涉及很多方面的内 ...
- [PyImageSearch] Ubuntu16.04 使用OpenCV和python识别信用卡 OCR
在今天的博文中,我将演示如何使用模板匹配作为OCR的一种形式来帮助我们创建一个自动识别信用卡并从图像中提取相关信用卡数位的解决方案. 今天的博文分为三部分. 在第一部分中,我们将讨论OCR-A字体,这 ...
随机推荐
- C语言实现常用查找算法——二分查找
#include<stdio.h> void insert_sort(int a[],int n); int binary_search(int a[],int x,int n); voi ...
- java反射机制获取自定义注解值和方法
由于工作需求要应用到java反射机制,就做了一下功能demo想到这些就做了一下记录 这个demo目的是实现动态获取到定时器的方法好注解名称,废话不多说了直接上源码 1.首先需要自定义注解类 /** * ...
- 音乐盒子mplayer问题review
背景:实现全志R16-linux开发板上的mplayer的调试 一.mplayer软件架构: 这里详细介绍了alsa的相关知识 二.问题解决1:播放卡顿 0.问题描述:播放过程中会突然发生卡顿,就 ...
- 深入V8引擎-AST(1)
没办法了,开坑吧,接下来的几篇会讲述JavaScript字符串源码在v8中转换成AST(抽象语法树)的过程. JS代码在V8的解析只有简单的几步,其中第一步就是将源字符串转换为抽象语法树,非常类似于v ...
- PWN菜鸡入门之栈溢出(1)
栈溢出 一.基本概念: 函数调用栈情况见链接 基本准备: bss段可执行检测: gef➤ b main Breakpoint at . gef➤ r Starting program: /mnt/ ...
- .NET开发框架(二)-框架功能简述
若视频播放不了,请点击 这里查看 本框架为响应式SPA框架,支持PC与手机端的屏幕自适应.手机展示效果视频在文章末尾查看. 框架入口地址:http://letyouknow.net/ 1.框架登录界面 ...
- 关于vue中使用rem问题
1.下载lib-flexible 我使用的是vue-cli+webpack,所以是通过npm来安装的 npm i lib-flexible --save 2.引入lib-flexible 在main. ...
- 【IDE】idea在debug模式启动非常慢,debug模式一直在启动中状态
现象:一直处于启动中状态,日志刷的很慢,非debug模式正常启动: 最终解决方式:下图按钮,取消所有打过的断点,问题解决
- CI框架中的奇葩
今天在win下开发,使用ci框架,本来是没有任何问题,然后转向了mac上开发,结果出现了个奇葩的问题,就是在ci框架中,控制器命名以"Admin_"为前缀的,在url中,控制器也必 ...
- 编译gd库出错
不知道大家有没有遇到在 X64 RedHat5 或者 RedHat4 下.编译安装PHP环境的时候. 安装了libxml,zlib,jpeg,libpng,freetype,libart_lgpl, ...