Repository navigation
Expand file tree
/
Copy pathgraph.py
More file actions
97 lines (73 loc) · 2.15 KB
/
Copy pathgraph.py
File metadata and controls
97 lines (73 loc) · 2.15 KB
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
from queue import Queue
from set import Set
class Graph:
def __init__(self, is_directed=False):
self.is_directed = is_directed
self.vertex = []
self.adj_list = {}
def __str__(self):
res = ""
for vertex in self.vertex:
res += f"{vertex} -> "
for neighbor in self.adj_list[vertex]:
res += f"{neighbor} "
res += "\n"
return res
def add_vertex(self, v):
if not v in self.vertex:
self.vertex.append(v)
self.adj_list[v] = []
def add_edge(self, a, b):
self.add_vertex(a)
self.add_vertex(b)
self.adj_list[a].append(b)
if not self.is_directed:
self.adj_list[b].append(a)
def bfs(self, element=None):
queue = Queue()
visited = Set()
order = []
if element is None:
start = self.vertex[0]
else:
if element in self.vertex:
start = element
else:
raise ValueError("Element not found")
queue.enqueue(start)
visited.add(start)
while len(queue) > 0:
current = queue.dequeue()
order.append(current)
for neighbor in self.adj_list[current]:
if neighbor not in visited:
visited.add(neighbor)
queue.enqueue(neighbor)
return order
def main():
print("=== Undirected Graph ===")
graph = Graph()
graph.add_edge("A", "B")
graph.add_edge("A", "C")
graph.add_edge("B", "D")
graph.add_edge("C", "D")
graph.add_edge("D", "F")
graph.add_edge("E", "F")
print(graph)
print("=" * 30)
print()
print("=== Directed Graph ===")
directed_graph = Graph(is_directed=True)
directed_graph.add_edge("A", "B")
directed_graph.add_edge("A", "C")
directed_graph.add_edge("C", "B")
directed_graph.add_edge("B", "D")
directed_graph.add_edge("D", "A")
print(directed_graph)
print("=" * 30)
print()
print("=== Visited Vertex ===")
visited = graph.bfs("F")
print(visited)
if __name__ == "__main__":
main()