Uh oh!
There was an error while loading. Please reload this page.
forked from faif/python-patterns
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgraph_search.py
More file actions
Latest commit
69 lines (55 loc) · 1.93 KB
/
Copy pathgraph_search.py
File metadata and controls
69 lines (55 loc) · 1.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
classGraphSearch:
"""Graph search emulation in python, from source
http://www.python.org/doc/essays/graphs/"""
def__init__(self, graph):
self.graph=graph
deffind_path(self, start, end, path=None):
path=pathor []
path.append(start)
ifstart==end:
returnpath
fornodeinself.graph.get(start, []):
ifnodenotinpath:
newpath=self.find_path(node, end, path[:])
ifnewpath:
returnnewpath
deffind_all_path(self, start, end, path=None):
path=pathor []
path.append(start)
ifstart==end:
return [path]
paths= []
fornodeinself.graph.get(start, []):
ifnodenotinpath:
newpaths=self.find_all_path(node, end, path[:])
paths.extend(newpaths)
returnpaths
deffind_shortest_path(self, start, end, path=None):
path=pathor []
path.append(start)
ifstart==end:
returnpath
shortest=None
fornodeinself.graph.get(start, []):
ifnodenotinpath:
newpath=self.find_shortest_path(node, end, path[:])
ifnewpath:
ifnotshortestorlen(newpath) <len(shortest):
shortest=newpath
returnshortest
defmain():
"""
# example of graph usage
>>> graph = {'A': ['B', 'C'], 'B': ['C', 'D'], 'C': ['D'], 'D': ['C'], 'E': ['F'], 'F': ['C']}
# initialization of new graph search object
>>> graph1 = GraphSearch(graph)
>>> print(graph1.find_path('A', 'D'))
['A', 'B', 'C', 'D']
>>> print(graph1.find_all_path('A', 'D'))
[['A', 'B', 'C', 'D'], ['A', 'B', 'D'], ['A', 'C', 'D']]
>>> print(graph1.find_shortest_path('A', 'D'))
['A', 'B', 'D']
"""
if__name__=="__main__":
importdoctest
doctest.testmod()