【问题标题】:How to find the largest connected area of a graph or matrix in Python?如何在 Python 中找到图形或矩阵的最大连通区域?
【发布时间】:2020-07-23 20:53:29
【问题描述】:

我已经为此苦苦挣扎了几天,而在 Python 中,没有办法为 JAVA 中的矩阵执行“int [] []”。我的第一个想法是使用 DFS 方法来耗尽路径。在程序中,我设置了递归的路径。但是,没有办法总是有一条路径,这意味着我必须迭代提供的图中的所有其他节点。我是编程新手,代码可能是湿的。

我的想法是:

  1. 如果当前顶点等于1,则使用DFS穷尽路径,如果有路径则计数。
  2. 如果当前顶点等于0,找到下一个节点,重复第一步。

这是我的代码(不完整)

def dfs_explore(graph, current_vertex, visited_x= None, visited_y = None):
if visited_x is None:
    visited_x = []
if visited_x is None:
    visited_y = []

stack_x = []
stack_y = []

rows = len(graph)
cols = len(graph[0]) if rows else 0

if not (visited_x and visted_y):
    for x in range(cols):
        for y in range(rows):
            if graph[x][y] != 0:
                stack_x.append(x) # the column neighbours
                stack_y.append(y)
                visited.append(x)
                visited.append(y)
                path = dfs_explore(graph, graph[x][y], visited_x, visited_y)
                if path:
                    return path
                else not path:
                    stack_x.pop()
                    stack_y.pop()

【问题讨论】:

标签: python numpy networkx


【解决方案1】:

如果您只想转换示例中的 Java 代码 一种可能性是使用 Numpy:

import numpy as np

dim_x = 5
dim_y = 4

#initialize with zeros
visited = np.zeros((dim_y, dim_x))

visited[3][3] = 1

print(visited)

另一种选择是使用简单的嵌套列表(“二维列表”):

dim_x = 5
dim_y = 4

#initialize with zeros
visited = [[0 for _x in range(dim_x)] for _y in range(dim_y)]

visited[3][3] = 1

print(visited)

您可以看看 NetworkX。有些功能似乎可以满足您的需求,例如connected_component_subgraphs (Example 1, Example 2)

您可能需要一个函数来计算节点的凸包,有几个可用的,但我不确定 NetworkX 中是否有一个。

【讨论】:

  • 感谢您的回复。我已经了解了如何使用“np”和嵌套循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 2011-06-07
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 2019-08-19
相关资源
最近更新 更多