From 590855d3980893f90696a8013601abde600f7aef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D1=80=D1=8C=D1=8F=20=D0=A2=D0=BE=D1=80=D0=B3?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0?= Date: Sat, 20 Dec 2025 11:13:53 +0300 Subject: [PATCH 1/2] Added Graph DFS --- src/iterators_11/deep_first_search.py | 58 +++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/iterators_11/deep_first_search.py diff --git a/src/iterators_11/deep_first_search.py b/src/iterators_11/deep_first_search.py new file mode 100644 index 0000000..7363324 --- /dev/null +++ b/src/iterators_11/deep_first_search.py @@ -0,0 +1,58 @@ +class Graph: + def __init__(self): + """ + Инициализация пустого графа, в виде словаря. + Ключ - вершина, значение - список смежных вершин. + """ + self.conection_list = {} + + def add_vertex(self, vertex): + """Добавление новой вершины в граф.""" + if vertex not in self.conection_list: + self.conection_list[vertex] = [] + + def add_edge(self, vertex1, vertex2): + """Добавление ребра между 2 вершинами""" + self.add_vertex(vertex1) + self.add_vertex(vertex2) + + self.conection_list[vertex1].append(vertex2) + self.conection_list[vertex2].append(vertex1) + + def dfs(self, start_vertex=None): + """ + Обход графа в глубину. + start_vertex: вершина, с которой начинается обход + return: список посещенных вершин в порядке обхода DFS + """ + if not self.conection_list: + return [] + + if start_vertex is None: # Начинаем с первой добавленной вершины + start_vertex = next(iter(self.conection_list)) + + if start_vertex not in self.conection_list: + raise ValueError(f"Вершины {start_vertex} не существует") + + visited = set() + stack = [start_vertex] + result = [] + + while stack: + vertex = stack.pop() + + if vertex not in visited: + visited.add(vertex) + result.append(vertex) + + neighbors = [] + for neighbor in self.conection_list[vertex]: + if neighbor not in visited: + neighbors.append(neighbor) + stack.extend(reversed(neighbors)) # Чтобы идти слева направо + + return result + + def __iter__(self): + """Возвращает итератор, который проходит по вершинам в порядке DFS""" + return iter(self.dfs()) From 27055a0065732cb25467b745cb6c0e5bbb86c079 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D1=80=D1=8C=D1=8F=20=D0=A2=D0=BE=D1=80=D0=B3?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0?= Date: Sat, 20 Dec 2025 22:37:12 +0300 Subject: [PATCH 2/2] Deleted variable --- src/iterators_11/deep_first_search.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/iterators_11/deep_first_search.py b/src/iterators_11/deep_first_search.py index 7363324..369aa58 100644 --- a/src/iterators_11/deep_first_search.py +++ b/src/iterators_11/deep_first_search.py @@ -45,11 +45,9 @@ def dfs(self, start_vertex=None): visited.add(vertex) result.append(vertex) - neighbors = [] - for neighbor in self.conection_list[vertex]: + for neighbor in reversed(self.conection_list[vertex]): if neighbor not in visited: - neighbors.append(neighbor) - stack.extend(reversed(neighbors)) # Чтобы идти слева направо + stack.append(neighbor) return result