Вы можете найти путь неориентированного G, а затем получить все ребра, которые строят путь неориентированного G, и проверить, есть ли эти ребра в подграфе исходного графа, индуцированного узлами пути [(1, 2), (2, 3)]
vs [(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)