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

Posted in 未分类