import numpy as np
from scipy. sparse . csgraph import connected_components
from scipy. sparse import csr_matrix
arr = np. array ( [
[ 0 , 1 , 2 ] ,
[ 1 , 0 , 0 ] ,
[ 2 , 0 , 0 ]
newarr = csr_matrix ( arr )
print ( connected_components ( newarr ) )

以上代码输出结果为:

(1, array([0, 0, 0], dtype=int32))

Dijkstra -- 最短路径算法

Dijkstra(迪杰斯特拉)最短路径算法,用于计算一个节点到其他所有节点的最短路径。

Scipy 使用 dijkstra() 方法来计算一个元素到其他元素的最短路径。

dijkstra() 方法可以设置以下几个参数:
  • return_predecessors: 布尔值,设置 True,遍历所有路径,如果不想遍历所有路径可以设置为 False。
  • indices: 元素的索引,返回该元素的所有路径。
  • limit: 路径的最大权重。
  • 查找元素 1 到 2 的最短路径:

    import numpy as np
    from scipy. sparse . csgraph import dijkstra
    from scipy. sparse import csr_matrix
    arr = np. array ( [
    [ 0 , 1 , 2 ] ,
    [ 1 , 0 , 0 ] ,
    [ 2 , 0 , 0 ]
    newarr = csr_matrix ( arr )
    print ( dijkstra ( newarr , return_predecessors = True , indices = 0 ) )

    以上代码输出结果为:

    (array([ 0.,  1.,  2.]), array([-9999,     0,     0], dtype=int32))

    Floyd Warshall -- 弗洛伊德算法

    弗洛伊德算法算法是解决任意两点间的最短路径的一种算法。

    Scipy 使用 floyd_warshall() 方法来查找所有元素对之间的最短路径。

    查找所有元素对之间的最短路径径:

    import numpy as np
    from scipy. sparse . csgraph import floyd_warshall
    from scipy. sparse import csr_matrix
    arr = np. array ( [
    [ 0 , 1 , 2 ] ,
    [ 1 , 0 , 0 ] ,
    [ 2 , 0 , 0 ]
    newarr = csr_matrix ( arr )
    print ( floyd_warshall ( newarr , return_predecessors = True ) )

    以上代码输出结果为:

    (array([[ 0., 1., 2.], [ 1., 0., 3.], [ 2., 3., 0.]]), array([[-9999, 0, 0], [ 1, -9999, 0], [ 2, 0, -9999]], dtype=int32))

    Bellman Ford -- 贝尔曼-福特算法

    贝尔曼-福特算法是解决任意两点间的最短路径的一种算法。

    Scipy 使用 bellman_ford() 方法来查找所有元素对之间的最短路径,通常可以在任何图中使用,包括有向图、带负权边的图。

    使用负权边的图查找从元素 1 到元素 2 的最短路径:

    import numpy as np
    from scipy. sparse . csgraph import bellman_ford
    from scipy. sparse import csr_matrix
    arr = np. array ( [
    [ 0 , - 1 , 2 ] ,
    [ 1 , 0 , 0 ] ,
    [ 2 , 0 , 0 ]
    newarr = csr_matrix ( arr )
    print ( bellman_ford ( newarr , return_predecessors = True , indices = 0 ) )

    以上代码输出结果为:

    (array([ 0., -1., 2.]), array([-9999, 0, 0], dtype=int32))

    深度优先顺序

    depth_first_order() 方法从一个节点返回深度优先遍历的顺序。

    可以接收以下参数:

    图开始遍历的元素

    给定一个邻接矩阵,返回深度优先遍历的顺序:

    import numpy as np
    from scipy. sparse . csgraph import depth_first_order
    from scipy. sparse import csr_matrix
    arr = np. array ( [
    [ 0 , 1 , 0 , 1 ] ,
    [ 1 , 1 , 1 , 1 ] ,
    [ 2 , 1 , 1 , 0 ] ,
    [ 0 , 1 , 0 , 1 ]
    newarr = csr_matrix ( arr )
    print ( depth_first_order ( newarr , 1 ) )

    以上代码输出结果为:

    (array([1, 0, 3, 2], dtype=int32), array([ 1, -9999, 1, 0], dtype=int32))

    广度优先顺序

    breadth_first_order() 方法从一个节点返回广度优先遍历的顺序。

    可以接收以下参数:

    图开始遍历的元素

    给定一个邻接矩阵,返回广度优先遍历的顺序:

    import numpy as np
    from scipy. sparse . csgraph import breadth_first_order
    from scipy. sparse import csr_matrix
    arr = np. array ( [
    [ 0 , 1 , 0 , 1 ] ,
    [ 1 , 1 , 1 , 1 ] ,
    [ 2 , 1 , 1 , 0 ] ,
    [ 0 , 1 , 0 , 1 ]
    newarr = csr_matrix ( arr )
    print ( breadth_first_order ( newarr , 1 ) )

    以上代码输出结果为:

    (array([1, 0, 2, 3], dtype=int32), array([ 1, -9999, 1, 1], dtype=int32))