python中ret是什么意思_数据结构图在python中的应用

原标题:数据结构图在python中的应用

程序世界里,有很多的数据结构,比如:堆、栈、链表等等,今天要讲的就是图数据结构啦。

相信大家都使用过或者听说过图数据库吧,我们就来看看最简单的图数据结构算法。

首先先来看一下图长什么样

ec8b481234fc4ab28eadd05346fe0c10.png

从上图能看出,比如节点A可以到达C、D、B,节点B只能到达E。

ok,这就是最基本的了,接下来来了解下游戏规则,我们需要列出所有可能的路径,比如:列出A到E的所有路径。

而在代码里,我们可能需要首先通过 字典+列表 的方式给出路径的设计,比如:

Graph = {'A': ['B', 'C', 'D'],

'B': ['E'],

'C': ['D', 'F'],

'D': ['B', 'E', 'G'],

'E': [],

'F': ['D', 'G'],

'G': ['E']}

在接下来,我们需要告诉程序,我们需要从哪里开始,走到哪里去,也就是常说的起始点和终点。

search_graph(Graph, 'A', 'E')

让我们来看下完整的代码吧:

def search_graph(graph: dict, start, end):

_ret = []

generate_path(graph, [start], end, _ret)

# 这一步的排序可有可无,只不过为了显示好看

_ret.sort(key=lambda x: len(x))

return _ret

def generate_path(graph: dict, path, end, ret: list):

_state = path[-1]

# 如果起始点和终点是同一个位置,则结束

if _state == end:

ret.append(path)

else:

for _item in graph[_state]:

if _item not in path:

# path + [_item] 就是递归调用的关键参数,path的组成

generate_path(graph, path + [_item], end, ret)

if __name__ == '__main__':

_GRAPH = {'A': ['B', 'C', 'D'],

'B': ['E'],

'C': ['D', 'F'],

'D': ['B', 'E', 'G'],

'E': [],

'F': ['D', 'G'],

'G': ['E']}

_ret = search_graph(_GRAPH, 'A', 'E')

print("******************")

print(' path A to E')

print("******************")

for i in _ret:

print(i)

结果如下图:

f97879a8411c6603282fd2ca992cffd1.png

主要的逻辑,大家可以拿张纸出来画画。

好啦,今天的内容就到这了,感兴趣的你,可以试试能不能走出来~

所有的代码都已上传至我的github:https://github.com/MiracleYoung/exercises返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提取表格的代码需要使用一些像处理和OCR(光学字符识别)技术,比较复杂。以下是一个简单的示例代码,可以通过opencv库读取片,对片进行处理并使用pytesseract库进行OCR识别: ```python import cv2 import numpy as np import pytesseract # 读取片 img = cv2.imread('table.jpg') # 转为灰度像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 像二值化 ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU) # 获取水平和垂直方向的结构元素 h_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (50,1)) v_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1,50)) # 对像进行膨胀操作,增强表格线条 h_img = cv2.dilate(thresh, h_kernel, iterations=1) v_img = cv2.dilate(thresh, v_kernel, iterations=1) # 对水平和垂直方向的线条进行合并 mask = cv2.bitwise_and(h_img, v_img) # 查找表格轮廓 contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 用矩形框标记表格轮廓 for contour in contours: x,y,w,h = cv2.boundingRect(contour) cv2.rectangle(img, (x,y), (x+w,y+h), (0,0,255), 2) # 对标记的表格进行OCR识别 text = pytesseract.image_to_string(img) # 输出识别结果 print(text) # 显示识别结果 cv2.imshow('image', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 需要注意的是,以上示例代码并不是通用的,只适用于特定的片和表格样式,需要根据实际情况进行调整和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值