Add a better DFS solution
This commit is contained in:
@@ -1,24 +1,33 @@
|
|||||||
# Adjacency list
|
# Adjacency list
|
||||||
first_graph = {
|
first_graph = {
|
||||||
1: [3, 20],
|
1: [3, 20, 4, 5, 6],
|
||||||
2: [20],
|
2: [20],
|
||||||
3: [1, 20],
|
3: [1, 20],
|
||||||
20: [2, 3]
|
20: [2, 3],
|
||||||
|
4: [1],
|
||||||
|
5: [1],
|
||||||
|
6: [1]
|
||||||
}
|
}
|
||||||
|
|
||||||
# First exercise: go from 1, to 20, to 2
|
# First exercise: go from 1, to 20, to 2
|
||||||
first_graph[first_graph[1][1]][0]
|
first_graph[first_graph[1][1]][0]
|
||||||
|
|
||||||
# pass visited by reference
|
# pass visited by reference
|
||||||
def depth_first_search(graph: dict, start, visited=set()):
|
def depth_first_search(graph: dict, start, visited=set(), traversal=list()):
|
||||||
print(start)
|
if start in visited:
|
||||||
|
return
|
||||||
|
|
||||||
|
visited.add(start)
|
||||||
|
traversal.append(start)
|
||||||
if len(visited)==len(graph):
|
if len(visited)==len(graph):
|
||||||
return visited
|
return
|
||||||
|
|
||||||
for x in graph[start]:
|
for x in graph[start]:
|
||||||
if x not in visited:
|
depth_first_search(graph, x, visited, traversal)
|
||||||
visited.add(x)
|
|
||||||
return depth_first_search(graph, x, visited)
|
|
||||||
|
|
||||||
|
|
||||||
depth_first_search(first_graph, 1)
|
visited = set()
|
||||||
|
traversal = list()
|
||||||
|
depth_first_search(first_graph, 1, visited, traversal)
|
||||||
|
print("Visited:", visited)
|
||||||
|
print("Traversal:", traversal)
|
||||||
|
|||||||
Reference in New Issue
Block a user