python实现图结构_python数据结构之图的实现方法

本文实例讲述了python数据结构之图的实现方法。分享给大家供大家参考。具体如下:

下面简要的介绍下:

比如有这么一张图:

A -> B

A -> C

B -> C

B -> D

C -> D

D -> C

E -> F

F -> C

可以用字典和列表来构建

graph = {'A': ['B', 'C'],

'B': ['C', 'D'],

'C': ['D'],

'D': ['C'],

'E': ['F'],

'F': ['C']}

找到一条路径:

def find_path(graph, start, end, path=[]):

path = path + [start]

if start == end:

return path

if not graph.has_key(start):

return None

for node in graph[start]:

if node not in path:

newpath = find_path(graph, node, end, path)

if newpath: return newpath

return None

找到所有路径:

def find_all_paths(graph, start, end, path=[]):

path = path + [start]

if start == end:

return [path]

if not graph.has_key(start):

return []

paths = []

for node in graph[start]:

if node not in path:

newpaths = find_all_paths(graph, node, end, path)

for newpath in newpaths:

paths.append(newpath)

return paths

找到最短路径:

def find_shortest_path(graph, start, end, path=[]):

path = path + [start]

if start == end:

return path

if not graph.has_key(start):

return None

shortest = None

for node in graph[start]:

if node not in path:

newpath = find_shortest_path(graph, node, end, path)

if newpath:

if not shortest or len(newpath) < len(shortest):

shortest = newpath

return shortest

希望本文所述对大家的Python程序设计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值