воскресенье, 2 августа 2015 г.

Поиск в глубину на Python3

Теория
Поиск в глубину используется в теории графов для перебора(посещения) всех вершин графа или для проверки существования пути из одной вершины в другую.
Идея метода: поиск начинается с некоторой вершины V. Рассматривается вершина U, смежная с вершиной V. Теперь вершина U является стартовой для поиска. Если на очередном шаге нет смежных вершин или все вершины доступные с текущей вершины уже расмотрены, то возвращаемся к предыдущей вершине. В случае если это стартовая вершина (V), то процесс окончен.
Реализация
После нескольких минут раздумий у меня получилось написать рабочий код на Python 3.4.3.
def dfs(node):                              # node - начальная вершина    ex.add(node)                            # исключаем ее сразу    for i in range(len(g)):
        if g[node][i] == 1 and i not in ex: # если есть ребро и вершина не исключена            print(i)                        # печать номера вершины            dfs(i)                          # запускаем обход снова, но с этой вершиныg = [[0,1,1],                               # матрица смежности     [1,0,1],     [1,1,0]]
ex = set()                                  # множество для исключения вершинdfs(1)                                      # вызов функции от первой вершины