scipy.sparse.csgraph.

depth_first_tree#

scipy.sparse.csgraph.depth_first_tree(csgraph, i_start, направленный=True)#

Вернуть дерево, сгенерированное поиском в глубину.

Обратите внимание, что дерево, сгенерированное поиском в глубину, не является уникальным: оно зависит от порядка, в котором просматриваются дочерние узлы каждого узла.

Добавлено в версии 0.11.0.

Параметры:
csgrapharray_like или разреженный массив или матрица

Матрица N x N, представляющая сжатый разреженный граф. Входной csgraph будет преобразован в формат csr для вычисления.

i_startint

Индекс начального узла.

направленныйbool, необязательно

Если True (по умолчанию), то работа с ориентированным графом: перемещение только от точки i к точке j по путям csgraph[i, j]. Если False, то поиск кратчайшего пути на неориентированном графе: алгоритм может переходить от точки i к j по csgraph[i, j] или csgraph[j, i].

Возвращает:
cstreecsr matrix

Направленное сжато-разреженное представление N x N дерева поиска в глубину, построенного из csgraph, начиная с указанного узла.

Примечания

Если возможны несколько допустимых решений, вывод может варьироваться в зависимости от версии SciPy и Python.

Примеры

Следующий пример показывает вычисление дерева обхода в глубину над простым графом из четырех компонентов, начиная с узла 0:

 input graph           depth first tree from (0)

     (0)                         (0)
    /   \                           \
   3     8                           8
  /       \                           \
(3)---5---(1)               (3)       (1)
  \       /                   \       /
   6     2                     6     2
    \   /                       \   /
     (2)                         (2)

В сжатом разреженном представлении решение выглядит так:

>>> from scipy.sparse import csr_array
>>> from scipy.sparse.csgraph import depth_first_tree
>>> X = csr_array([[0, 8, 0, 3],
...                [0, 0, 2, 5],
...                [0, 0, 0, 6],
...                [0, 0, 0, 0]])
>>> Tcsr = depth_first_tree(X, 0, directed=False)
>>> Tcsr.toarray().astype(int)
array([[0, 8, 0, 0],
       [0, 0, 2, 0],
       [0, 0, 0, 6],
       [0, 0, 0, 0]])

Обратите внимание, что полученный граф является направленным ациклическим графом, который охватывает граф. В отличие от дерева поиска в ширину, дерево поиска в глубину для данного графа не является уникальным, если граф содержит циклы. Если бы приведенное выше решение начиналось с ребра, соединяющего узлы 0 и 3, результат был бы другим.