Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 04c28e0

Browse files
committed
Add DFS implementation
1 parent 8345039 commit 04c28e0

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
class Graph:
2+
# Constructor
3+
def __init__(self, num_of_nodes, directed=True):
4+
self.m_num_of_nodes = num_of_nodes
5+
self.m_nodes = range(self.m_num_of_nodes)
6+
7+
# Directed or Undirected
8+
self.m_directed = directed
9+
10+
# Graph representation - Adjacency list
11+
# We use a dictionary to implement an adjacency list
12+
self.m_adj_list = {node: set() for node in self.m_nodes}
13+
14+
# Add edge to the graph
15+
def add_edge(self, node1, node2, weight=1):
16+
self.m_adj_list[node1].add((node2, weight))
17+
18+
if not self.m_directed:
19+
self.m_adj_list[node2].add((node1, weight))
20+
21+
# Print the graph representation
22+
def print_adj_list(self):
23+
for key in self.m_adj_list.keys():
24+
print("node", key, ": ", self.m_adj_list[key])
25+
26+
def dfs(self, start, target, path = [], visited = set()):
27+
path.append(start)
28+
visited.add(start)
29+
if start == target:
30+
return path
31+
for (neighbour, weight) in self.m_adj_list[start]:
32+
if neighbour not in visited:
33+
result = self.dfs(neighbour, target, path, visited)
34+
if result is not None:
35+
return result
36+
path.pop()
37+
return None
38+
39+
def main():
40+
graph = Graph(5, directed=False)
41+
42+
graph.add_edge(0, 1)
43+
graph.add_edge(0, 2)
44+
graph.add_edge(1, 3)
45+
graph.add_edge(2, 3)
46+
graph.add_edge(3, 4)
47+
48+
graph.print_adj_list()
49+
50+
traversal_path = []
51+
traversal_path = graph.dfs(0, 3)
52+
print(traversal_path)
53+
54+
if __name__=="__main__":
55+
main()

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /