当前位置: 首页 > 知识库问答 >
问题:

使用networkx生成完整的DFS路径

尹凌龙
2023-03-14

我正在尝试生成完整的路径列表,而不是优化的。使用下面的示例可以更好地解释。

import networkx as nx
G = nx.Graph()
G.add_edges_from([(0, 1), (1, 2), (2, 3)])
G.add_edges_from([(0, 1), (1, 2), (2, 4)])
G.add_edges_from([(0, 5), (5, 6)])

上面代码创建了一个带有边的图0=>1=>2=>30=>1=>2=>40=>5=>6

我想要的只是从0中提取所有路径。

我试过:

>> list(nx.dfs_edges(G, 0))
[(0, 1), (1, 2), (2, 3), (2, 4), (0, 5), (5, 6)]

我想要的只是:

[(0, 1, 2, 3), (0, 1, 2, 4), (0, 5, 6)]

是否有任何来自networkx的预先存在的方法可以使用?如果没有,有什么方法可以编写一个最优的方法来完成这项工作?

注意:我的问题仅限于给出的例子。再也不可能有拐角案件了。

注2:为简化起见,生成数据。在我的例子中,edges列表来自数据集。假设给定一个图和一个节点(比如0),我们能生成所有的路径吗?

共有1个答案

公冶阳德
2023-03-14

试一试:

import networkx as nx

G = nx.Graph()
G.add_edges_from([(0, 1), (1, 2), (2, 3)])
G.add_edges_from([(0, 1), (1, 2), (2, 4)])
G.add_edges_from([(0, 5), (5, 6)])

pathes = []

path = [0]
for edge in nx.dfs_edges(G, 0):
    if edge[0] == path[-1]:
        # node of path
        path.append(edge[1])
    else:
        # new path
        pathes.append(path)
        search_index = 2
        while search_index <= len(path):
            if edge[0] == path[-search_index]:
                path = path[:-search_index + 1] + [edge[1]]
                break
            search_index += 1
        else:
            raise Exception("Wrong path structure?", path, edge)
# append last path
pathes.append(path)
print(pathes)
# [[0, 1, 2, 3], [0, 1, 2, 4], [0, 5, 6]]
 类似资料:
  • 下面的函数打印所有的子路径。是否可以只显示完整的路径,即A->B->C(包含以下所需的输出)。

  • 这个问题是NetworkX特有的。我可以创建自己的函数来完成所有我需要的事情,但是这需要更长的时间,所以我想避免它。 情况: 我有一个未加权图,由NetworkX无向图表示。从这个图中,我寻找“最短循环”——也就是说,对于给定的节点k,我正在寻找最短的简单路径(只通过一个节点一次),它离开k,然后返回k。 为了实现这一点,我想使用任何NetworkX最短路径算法,并从节点k到节点k进行搜索。问题是

  • 问题内容: 我有以下问题。我的Linux机器上有一棵单独的{bin,lib,include}树,安装了我的开发工作所需的CMake和所有库。但是只有PATH环境变量被设置到该bin目录,由于某些原因,我无法设置LD_LIBRARY_PATH。该树中的所有程序都是使用RPATH构建的。我正在使用的CMake3.3.1也在此树中。 现在,我想使用libcurl编译程序并设置以下CMakeLists.t

  • 下面是DFS算法的伪代码http://www.mazeworks.com/mazegen/mazetut/index.htm 创建一个CellStack(后进先出)来保存单元格位置列表 设置TotalCells=网格中的单元格数 随机选择一个单元格并将其命名为CurrentCell 设置VisitedCells=1 在探访牢房时 别的 从CellStack中弹出最近的单元格条目 使其成为Curre

  • 问题内容: 我需要使用networkx生成一个完全连接的子图,从要连接的节点列表开始。基本上,我希望传递给函数的列表中的所有节点都相互连接。 我想知道是否有内置功能来实现这一点(我还没有找到)?还是我应该考虑一些算法? 非常感谢你。 问题答案: 我不知道有什么方法可以做到这一点,但是您可以轻松模仿networkx的complete_graph()方法并稍作更改(几乎像内置方法一样):

  • 我正在尝试实现DFS回溯算法,该算法涉及利用维基百科上的堆栈(而不是递归算法)。我试图生成一个由0和1组成的迷宫,其中1代表一堵墙,0代表一条可用路径。对于迷宫中不是墙的任何给定空间,必须始终有一条有效的路径,可以从任何其他非墙单元格到达。 我从一个迷宫开始,它是一个二维大小的迷宫阵列[15][20],然后按照算法将需要标记为已正确访问的单元格标记为已访问。最初,所有单元格(不包括外部边框)都标记