Skip to content

Commit dcd3d8d

Browse files
committed
feat: bfs-dfs-graph-traversal challenge
1 parent 17e8cd9 commit dcd3d8d

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
from collections import deque
2+
3+
class Graph:
4+
def __init__(self, vertices):
5+
self.V = vertices
6+
self.adj = [[] for _ in range(vertices)]
7+
8+
def add_edge(self, u, v):
9+
self.adj[u].append(v)
10+
self.adj[v].append(u) # Assuming undirected graph
11+
12+
def bfs(self, start):
13+
visited = [False] * self.V
14+
queue = deque([start])
15+
visited[start] = True
16+
result = []
17+
18+
while queue:
19+
vertex = queue.popleft()
20+
result.append(vertex)
21+
for neighbor in self.adj[vertex]:
22+
if not visited[neighbor]:
23+
visited[neighbor] = True
24+
queue.append(neighbor)
25+
return result
26+
27+
def dfs_util(self, v, visited, result):
28+
visited[v] = True
29+
result.append(v)
30+
for neighbor in self.adj[v]:
31+
if not visited[neighbor]:
32+
self.dfs_util(neighbor, visited, result)
33+
34+
def dfs(self, start):
35+
visited = [False] * self.V
36+
result = []
37+
self.dfs_util(start, visited, result)
38+
return result
39+
40+
def bfs_disconnected(self):
41+
visited = [False] * self.V
42+
result = []
43+
for i in range(self.V):
44+
if not visited[i]:
45+
queue = deque([i])
46+
visited[i] = True
47+
while queue:
48+
vertex = queue.popleft()
49+
result.append(vertex)
50+
for neighbor in self.adj[vertex]:
51+
if not visited[neighbor]:
52+
visited[neighbor] = True
53+
queue.append(neighbor)
54+
return result
55+
56+
def dfs_disconnected(self):
57+
visited = [False] * self.V
58+
result = []
59+
for i in range(self.V):
60+
if not visited[i]:
61+
self.dfs_util(i, visited, result)
62+
return result
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Challenge: Implement breadth-first search (BFS) and depth-first search (DFS) algorithms to traverse a graph represented by adjacency lists.
2+
# Ensure coverage of both connected and disconnected graphs.
3+
4+
from graph import Graph
5+
6+
def main():
7+
g = Graph(7)
8+
edges = [(0, 1), (0, 2), (1, 3), (1, 4), (2, 5), (5, 6)]
9+
for u, v in edges:
10+
g.add_edge(u, v)
11+
12+
print("BFS starting from vertex 0:")
13+
print(g.bfs(0))
14+
15+
print("DFS starting from vertex 0:")
16+
print(g.dfs(0))
17+
18+
print("BFS for disconnected graph:")
19+
print(g.bfs_disconnected())
20+
21+
print("DFS for disconnected graph:")
22+
print(g.dfs_disconnected())
23+
24+
if __name__ == "__main__":
25+
main()

0 commit comments

Comments
 (0)