-
Notifications
You must be signed in to change notification settings - Fork 0
/
12_7.py
32 lines (29 loc) · 1.28 KB
/
12_7.py
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
from graphtheory import *
def printPath(path):
"""pathはNodeオブジェクトからなるリストとする"""
result = ''
for i in range(len(path)):
result = result + str(path[i])
if i != len(path) - 1:
result = result + '->'
return result
def DFS(graph, start, end, path, shortest, toPrint=False):
"""graphとDigraphオブジェクト、startとendはNodeオブジェクト
pathとshortestは、Nodeオブジェクトのリストとする
graphでの、startノードからendノードへの最短経路を返す"""
path = path + [start]
if toPrint:
print('Current DFS path:', printPath(path))
if start == end:
return path
for node in graph.childrenOf(start):
if node not in path: #サイクルを避ける
if shortest == None or len(path) < len(shortest):
newPath = DFS(graph, node, end, path, shortest, toPrint)
if newPath != None:
shortest = newPath
return shortest
def shortestPath(graph, start, end, toPrint=False):
"""graphはDigraphオブジェクト、startとendはNodeオブジェクトとする
graphでのstartノードからendノードへの最短経路を返す"""
return DFS(graph, start, end, [], None, toPrint)