Added all the codes.
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
# Assignment-A1: DFS & BFS
|
||||
|
||||
"""
|
||||
THIS CODE HAS BEEN TESTED AND IS FULLY OPERATIONAL.
|
||||
|
||||
Problem Statement: Implement depth first search algorithm and Breadth First Search algorithm, Use an undirected graph and develop a recursive algorithm for searching all the vertices of a graph or tree data structure.
|
||||
|
||||
Code from ArtificialIntelligence (SPPU - Third Year - Computer Engineering - Content) repository on KSKA Git: https://git.kska.io/sppu-te-comp-content/ArtificialIntelligence
|
||||
"""
|
||||
|
||||
# BEGINNING OF CODE
|
||||
from collections import deque
|
||||
|
||||
class Graph:
|
||||
# Constructor to initalize an empty dictionary
|
||||
def __init__(self):
|
||||
self.graph = {}
|
||||
|
||||
# Add edges
|
||||
def add_edge(self, u, v):
|
||||
if u not in self.graph:
|
||||
self.graph[u] = []
|
||||
if v not in self.graph:
|
||||
self.graph[v] = []
|
||||
self.graph[u].append(v)
|
||||
self.graph[v].append(u) # Since the graph is undirected; Comment this line if graph is directed.
|
||||
|
||||
# Perform Depth First Search (DFS)
|
||||
def dfs(self, start, visited=None):
|
||||
if visited is None:
|
||||
visited = set()
|
||||
|
||||
visited.add(start)
|
||||
print(start, end=" ")
|
||||
|
||||
for neighbour in self.graph.get(start, []):
|
||||
if neighbour not in visited:
|
||||
self.dfs(neighbour, visited)
|
||||
|
||||
# Perform Breadth First Search (BFS)
|
||||
def bfs(self, start):
|
||||
visited = set()
|
||||
visited.add(start)
|
||||
queue = deque([start])
|
||||
|
||||
def bfs_helper():
|
||||
if not queue:
|
||||
return
|
||||
|
||||
vertex = queue.popleft()
|
||||
print(vertex, end=" ")
|
||||
|
||||
for neighbour in self.graph.get(vertex, []):
|
||||
if neighbour not in visited:
|
||||
visited.add(neighbour)
|
||||
queue.append(neighbour)
|
||||
bfs_helper()
|
||||
|
||||
bfs_helper()
|
||||
|
||||
def main():
|
||||
g = Graph()
|
||||
|
||||
while True:
|
||||
print("\n\n", "-"*10, "MAIN MENU", "-"*10)
|
||||
print("1. Add edge")
|
||||
print("2. Depth First Search (DFS)")
|
||||
print("3. Breadth First Search (BFS)")
|
||||
print("4. Exit")
|
||||
choice = int(input("Choose an option (1-4):\t"))
|
||||
print("-"*32)
|
||||
|
||||
if choice == 1:
|
||||
total = int(input("\nTotal edges to add:\t"))
|
||||
for i in range(total):
|
||||
print(f"EDGE {i+1} ->")
|
||||
u = input(f"Enter first vertex for edge {i+1}: ")
|
||||
v = input(f"Enter second vertex for edge {i+1}: ")
|
||||
g.add_edge(u, v)
|
||||
print("\nVertices and its neighbours are:\t", g.graph)
|
||||
elif choice == 2:
|
||||
start = input("\nEnter starting vertex for DFS:\t")
|
||||
print("Depth First Search (DFS):\t")
|
||||
g.dfs(start)
|
||||
elif choice == 3:
|
||||
start = input("\nEnter starting vertex for BFS:\t")
|
||||
print("Breadth First Search (BFS):\t")
|
||||
g.bfs(start)
|
||||
elif choice == 4:
|
||||
print("\n## END OF CODE\n")
|
||||
break
|
||||
else:
|
||||
print("\nPlease choose a valid option.")
|
||||
|
||||
main()
|
||||
# END OF CODE
|
||||
Reference in New Issue
Block a user