From 1258c4ef3e08ac99fe3746454ef79bb5f9b415c5 Mon Sep 17 00:00:00 2001 From: ermmmaks Date: Fri, 28 Nov 2025 17:40:41 +0300 Subject: [PATCH 1/2] Add dfs algotithm --- src/dfs.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/dfs.py diff --git a/src/dfs.py b/src/dfs.py new file mode 100644 index 0000000..e66cf61 --- /dev/null +++ b/src/dfs.py @@ -0,0 +1,35 @@ +class Graph: + def __init__(self, vertices: list[int], edges: list[tuple[int, int]]): + self.vertices = vertices + self.edges = edges + self.passage= [] + + def __iter__(self): + if not self.passage: + self.dfs() + return iter(self.passage) + + def dfs(self): + passed = set() + self.passage = [] + + def step(vertex): + if vertex not in passed: + passed.add(vertex) + self.passage.append(vertex) + + neighbors = [] + for edge in self.edges: + if edge[0] == vertex: + neighbors.append(edge[1]) + elif edge[1] == vertex: + neighbors.append(edge[0]) + + for neighbor in neighbors: + step(neighbor) + + for vertex in self.vertices: + if vertex not in passed: + step(vertex) + + return self.passage From 9664c628bcde3e19aa00b69922bdfec8518a47cf Mon Sep 17 00:00:00 2001 From: ermmmaks Date: Sat, 29 Nov 2025 00:47:02 +0300 Subject: [PATCH 2/2] Add tests for dfs --- src/dfs.py | 4 ++-- test/dfs_test.py | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 test/dfs_test.py diff --git a/src/dfs.py b/src/dfs.py index e66cf61..0d3de98 100644 --- a/src/dfs.py +++ b/src/dfs.py @@ -25,8 +25,8 @@ def step(vertex): elif edge[1] == vertex: neighbors.append(edge[0]) - for neighbor in neighbors: - step(neighbor) + for neighbor in neighbors: + step(neighbor) for vertex in self.vertices: if vertex not in passed: diff --git a/test/dfs_test.py b/test/dfs_test.py new file mode 100644 index 0000000..d64d458 --- /dev/null +++ b/test/dfs_test.py @@ -0,0 +1,22 @@ +from src.dfs import Graph + +def test_simple_graph(): + vertices = [1, 2, 3, 4] + edges = [(1, 2), (2, 3), (3, 4)] + graph = Graph(vertices, edges) + result = list(graph) + assert result == [1, 2, 3, 4] + +def test_single_vertex(): + vertices = [1] + edges = [] + graph = Graph(vertices, edges) + result = list(graph) + assert result == [1] + +def test_empty_graph(): + vertices = [] + edges = [] + graph = Graph(vertices, edges) + result = list(graph) + assert result == [] \ No newline at end of file