寻找在Networkx MultiDigraph路径

问题描述 投票:0回答:2

我有这样一个MultiDigraph

G=nx.MultiDiGraph()

G.add_edge(1,2,attr=0.5)
G.add_edge(3,2,attr=1.0)

我试图找到节点3将提供的结果是这样的,从节点1的路径:

1 to 2 (forward), 2 to 3 (reverse). 

任何Networkx办法做到这一点?谢谢,

python graph networkx breadth-first-search
2个回答
1
投票

您可以创建图形的无向版本,检查那里的路径。然后回到你向图找到,如果你不得不向后沿着特定边走:

Gu = G.to_undirected()
path = nx.shortest_path(Gu, source=1, target=3)

# Go through each edge in the path to check if it's "forward"
for x in range(len(path)-1):
    if G.has_edge(path[x], path[x+1]):
        print(f'{path[x]} to {path[x+1]} (forward)')
    elif G.has_edge(path[x+1], path[x]):
        print(f'{path[x]} to {path[x+1]} (reverse)')
    else:
        # This shouldn't happen but always good to check
        print(f'No path from {path[x]} to {path[x+1]}')

0
投票

你可以找到无向G的路径,然后让所有的边缘,这建立无向G的路径,并检查这些边缘由路径诱导原始图的节点子VS [(1, 2), (2, 3)] [(1, 2), (3, 2)]

import networkx as nx

G=nx.MultiDiGraph()

G.add_edge(1,2,attr=0.5)
G.add_edge(3,2,attr=1.0)

path = nx.shortest_path(G.to_undirected(), source=1, target=3)
path_edges = zip(path, path[1:])
path_subgraph = G.subgraph(path)

for i in path_edges:
    if i in path_subgraph.edges():
        print(f'{i[0]} to {i[1]} (forward)')
    else:
        print(f'{i[0]} to {i[1]} (reverse)')

# 1 to 2 (forward)
# 2 to 3 (reverse)
© www.soinside.com 2019 - 2024. All rights reserved.