Python 什么';寻找孤立子集的正确算法是什么

Python 什么';寻找孤立子集的正确算法是什么,python,algorithm,networkx,Python,Algorithm,Networkx,图片胜过千言万语,所以: 我的输入是左边的矩阵,我需要找到的是距离彼此最大一步(不是对角线)的节点集。多个上/下/左/右步骤的节点将位于单独的集合中 因此,我的计划是从我找到的每个节点运行BFS,然后返回它所遍历的集合,并将其从原始集合中删除。重复这个过程直到我完成。但后来我有了一个寻找图形分析工具的疯狂想法——我找到了NetworkX。是否有一种简单的方法(算法?)来实现这一点,而无需手动编写BFS,并遍历整个矩阵 谢谢您要做的是搜索“连接的组件”和 NetworX本身就有一种方法可以做到这

图片胜过千言万语,所以:

我的输入是左边的矩阵,我需要找到的是距离彼此最大一步(不是对角线)的节点集。多个上/下/左/右步骤的节点将位于单独的集合中

因此,我的计划是从我找到的每个节点运行BFS,然后返回它所遍历的集合,并将其从原始集合中删除。重复这个过程直到我完成。但后来我有了一个寻找图形分析工具的疯狂想法——我找到了NetworkX。是否有一种简单的方法(算法?)来实现这一点,而无需手动编写BFS,并遍历整个矩阵


谢谢

您要做的是搜索“连接的组件”和 NetworX本身就有一种方法可以做到这一点,正如其他人在评论中已经指出的那样,在第一个示例中可以看到这一点

阅读您的问题,您的节点似乎位于离散网格上,您描述的连接概念与图像像素上使用的概念相同

连接组件算法也可用于图形和图像

如果性能在您的情况下很重要,我建议您选择连接组件的映像版本。 这是因为图像(像素网格)是一类特定的图形,所以连接组件算法处理节点网格 是在知道图本身的拓扑结构的情况下构建的(即图是平面的,最大顶点度为4)。图的一般算法必须能够处理一般图 (也就是说,它们可能不是平面的,在一些节点之间有多条边),因此它必须花费更多的工作,因为它不能对输入图形的属性进行太多假设

由于在线性时间内可以在图形上找到连接的组件,所以我不会说图像版本会快几个数量级。两者之间只有一个常数因子。
因此,您还应考虑保存输入数据的数据结构,以及创建每个版本的算法所需的输入结构所需的时间。

您的输入是什么格式的?每个点只是作为一个坐标对列出的,还是您实际上明确地拥有连接信息?另外,
networkx
也有广度优先搜索。它是一个坐标矩阵。我可以实现bfs,没问题-但是我还必须迭代整个矩阵,并在每次找到子集时减少它。希望节省一些工作。为什么要再次迭代矩阵?如果已经标记了已访问的节点,则不需要这样做,对吗?应该是,我会在相邻的填充单元之间创建链接,然后使用,您可以在矩阵上迭代,将每个点连接到相邻点(如果存在),然后使用networkx函数,为您提供连接的组件。