Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions src/DFS/DFS.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
class Graph:
def __init__(self, vertices: list[int], edges: list[tuple[int, int]]) -> None:
self.vertices = vertices
self.edges = edges
self.ind = 0

def dfs_gen(self):
states = {"white": [v for v in self.vertices], "gray": list(), "black": list()}
visited_verteces = []

def dfs_step(vertex):
if vertex in states["white"]:
states["gray"].append(vertex)
states["white"].remove(vertex)
visited_verteces.append(vertex)
for edge in self.edges:
if edge[0] == vertex:
dfs_step(edge[1])
if edge[1] == vertex:
dfs_step(edge[0])

for vertex in self.vertices:
dfs_step(vertex)
yield from visited_verteces

def __iter__(self):
return self.dfs_gen()

# realisation of dfs method that returns list of visited verteces (first subtask)
def dfs(self):
return list(self.dfs_gen())


40 changes: 40 additions & 0 deletions src/DFS/DFS_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from DFS import Graph

def test_graph_iteration():
g1 = Graph([0, 1, 2, 3, 4, 5, 6, 7],
[(0, 1), (0, 2), (0, 3), (1, 4), (1, 5), (2, 6), (3, 7)])
g1l = list(g1)
correct_way = [0, 1, 4, 5, 2, 6, 3, 7]
assert correct_way == g1l

def test_line_iteration():
g2 = Graph([0, 1, 2, 3, 4],
[(0, 1), (1, 2), (3, 4)])
g2l = list(g2)
correct_way = [0, 1, 2, 3, 4]
assert correct_way == g2l

def test_single_vertex():
g3 = Graph([0],
[])
g3l = list(g3)
assert g3l == [0]

def test_zero_vertex():
g4 = Graph([],
[])
g4l = list(g4)
assert g4l == []

def test_dfs():
g5 = Graph([0, 1, 2, 3, 4, 5, 6, 7],
[(0, 1), (0, 2), (0, 3), (1, 4), (1, 5), (2, 6), (3, 7)])
correct_way = [0, 1, 4, 5, 2, 6, 3, 7]
assert correct_way == g5.dfs()