From 15a7c36f9c7c8e25a91a88db381ac4c54f253e23 Mon Sep 17 00:00:00 2001 From: Tatiana Muromtseva Date: Wed, 26 Nov 2025 22:20:24 +0300 Subject: [PATCH 1/4] Add depth-first search algorithm --- src/dfs.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/dfs.py diff --git a/src/dfs.py b/src/dfs.py new file mode 100644 index 0000000..ffc3d6b --- /dev/null +++ b/src/dfs.py @@ -0,0 +1,37 @@ +class Graph: + def init(self): + self.adj = {} + self._dfs_order = None # порядок обхода для итерации + + def add_vertex(self, v): + if v not in self.adj: + self.adj[v] = [] + + def add_edge(self, u, v): + self.add_vertex(u) + self.add_vertex(v) + self.adj[u].append(v) + self.adj[v].append(u) + + def dfs(self, start): + visited = set() + order = [] + + def _dfs(v): + visited.add(v) + order.append(v) + for nxt in self.adj[v]: + if nxt not in visited: + _dfs(nxt) + + _dfs(start) + self._dfs_order = order # граф станет итерируемым в этом порядке + return order + + def iter(self): + # итерируем граф в порядке последнего DFS + if self._dfs_order is None: + raise RuntimeError( + "Сначала нужно вызвать dfs(), чтобы определить порядок итерации" + ) + return iter(self._dfs_order) From d5391dbb2d7076b9fbedb6a2525f4d51234ddf44 Mon Sep 17 00:00:00 2001 From: Tatiana Muromtseva Date: Wed, 26 Nov 2025 22:20:56 +0300 Subject: [PATCH 2/4] and test for it --- tests/test_dfs.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 tests/test_dfs.py diff --git a/tests/test_dfs.py b/tests/test_dfs.py new file mode 100644 index 0000000..5d2ed7e --- /dev/null +++ b/tests/test_dfs.py @@ -0,0 +1,23 @@ +import pytest +from src.dfs import Graph + + +def test_dfs_order(): + g = Graph() + g.add_edge(1, 2) + g.add_edge(1, 3) + g.add_edge(2, 4) + g.add_edge(2, 5) + + result = g.dfs(1) + assert result == [1, 2, 4, 5, 3] + + +def test_iteration_after_dfs(): + g = Graph() + g.add_edge("A", "B") + g.add_edge("A", "C") + g.add_edge("B", "D") + + order = g.dfs("A") + assert list(g) == order From 4f5b9254840c63508a315b503777147ccb0e10fe Mon Sep 17 00:00:00 2001 From: Tatiana Muromtseva Date: Mon, 8 Dec 2025 04:50:20 +0300 Subject: [PATCH 3/4] Pull workflow from CI branch --- .github/workflows/main.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..56c2ac4 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,19 @@ +name: Ruff +on: push +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install Python + uses: actions/setup-python@v5 + with: + python-version: "3.13.7" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install ruff pytest + - name: Run Ruff + run: ruff check --output-format=github . + - name: Run unit-tests + run: python -m pytest tests/* From 13a1c69ff8f4a9ce3afc67f692662a9b80917c67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B0=D1=82=D1=8C=D1=8F=D0=BD=D0=B0=20=D0=9C=D1=83?= =?UTF-8?q?=D1=80=D0=BE=D0=BC=D1=86=D0=B5=D0=B2=D0=B0?= Date: Wed, 17 Dec 2025 23:04:59 +0300 Subject: [PATCH 4/4] Update test_dfs.py --- tests/test_dfs.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_dfs.py b/tests/test_dfs.py index 5d2ed7e..4c9610f 100644 --- a/tests/test_dfs.py +++ b/tests/test_dfs.py @@ -1,4 +1,3 @@ -import pytest from src.dfs import Graph