图片胜过千言万语,所以:
我的输入是左边的矩阵,我需要找到的是最远彼此相距一步(不是对角线)的节点集。多于一个上/下/左/右步的节点将在一个单独的集合中。
所以,我的计划是从我找到的每个节点运行一个BFS,然后返回它遍历的集合,并从原始集中删除它。迭代这个过程,直到我完成。但后来我有了寻找图形分析工具的疯狂想法 - 我找到了NetworkX。有没有一种简单的方法(算法?)来实现这一点,而无需手动编写BFS,并遍历整个矩阵?
由于
答案 0 :(得分:0)
您要做的是搜索"连接的组件"和 NetworX本身就是一种完全相同的方法,就像在documentation page的第一个例子中可以看到的那样,正如其他人已经在评论中指出的那样。
阅读您的问题似乎您的节点位于离散网格上,并且您描述的连接概念与图像像素上使用的相同。
连接组件算法也可用于图形和图像。
如果在您的情况下表演很重要,我建议您选择连接组件的图像版本。 这是因为图像(像素网格)是一类特定的图形,因此连接的组件算法处理节点的网格 知道图形本身的拓扑结构(即图形是平面的,最大顶点度数是4)。图的一般算法能够在一般图上工作 (即它们可能不是平面的,在某些节点之间有多个边缘)因此它必须花费更多的工作,因为它不能假设输入图的属性。
由于可以在线性时间的图表上找到连接的组件,我不是说图像版本会快几个数量级。两者之间只有一个恒定的因素。 出于这个原因,您还应该考虑哪个是保存输入数据的数据结构,以及创建每个算法版本所需的输入结构所花费的时间。