diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml new file mode 100644 index 0000000..0695e93 --- /dev/null +++ b/.github/workflows/run_tests.yml @@ -0,0 +1,29 @@ +name: Python application + +on: [push] + +permissions: + contents: read + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.13 + uses: actions/setup-python@v3 + with: + python-version: "3.13" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install ruff + pip install pytest + - name: Lint with ruff + run: | + ruff check --output-format=github + - name: Test with pytest + run: | + pytest \ No newline at end of file diff --git a/hw_10/dfs.py b/hw_10/dfs.py new file mode 100644 index 0000000..a8d09bc --- /dev/null +++ b/hw_10/dfs.py @@ -0,0 +1,39 @@ +class Graph: + def __init__(self, vertices: list[int], edges: list[tuple[int, int]]) -> None: + self.vertices = vertices + self.edges = edges + self.visited_order = [] + + def __iter__(self): + if not self.visited_order: + self.dfs() + return iter(self.visited_order) + + def dfs(self) -> list[int]: + states = {"w": [v for v in self.vertices], "g": list(), "b": list()} + + def dfs_step(vertex): + if vertex in states["w"]: + states["g"].append(vertex) + states["w"].remove(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) + + self.visited_order = states["g"] + return self.visited_order + + +g = Graph([1, 2, 3], [(1, 3), (2, 3), (2, 1)]) + +a = g.dfs() +b = list(iter(g)) +print(a, b) + + + diff --git a/hw_10/test_dfs.py b/hw_10/test_dfs.py new file mode 100644 index 0000000..609f781 --- /dev/null +++ b/hw_10/test_dfs.py @@ -0,0 +1,11 @@ +from dfs import Graph + +graph = Graph([1, 2, 3], [(1, 3), (2, 3), (2, 1)]) + +def test_1(): + g = graph.dfs() + assert g == [1, 3, 2] + +def test_2(): + g = list(iter(graph)) + assert g == [1, 3, 2] \ No newline at end of file