Для второго выпуска у узла может быть сколько угодно измерений.
Например, рассмотрим следующую сетку.
import networkx as nx
g = nx.grid_2d_graph(2,2)
print(g.nodes()) #[(0, 0), (0, 1), (1, 0), (1, 1)]
print(g.edges()) #[((0, 0), (1, 0)), ((0, 0), (0, 1)), ((0, 1), (1, 1)), ((1, 0), (1, 1))]
print(nx.shortest_path(g, source=(0, 0), target=(1,0))) #[(0, 0), (1, 0)]
или с еще большим количеством размеров:
g = nx.grid_graph(dim=[2,2,2,2])
g.nodes()
#[(0, 0, 0, 0), (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1), (1, 0, 0, 1), (0, 1, 0, 1), (0, 0, 1, 1), (1, 0, 1, 0), (0, 1, 1, 0), (1, 0, 1, 1), (0, 1, 1, 1), (1, 1, 0, 0), (1, 1, 0, 1), (1, 1, 1, 0), (1, 1, 1, 1)]
По остальным вопросам:
Мой путь всегда меняется : это зависит от веса на краях, если кратчайший путь не уникален, это нормально, что он меняется
, когда исходная и целевая точки не являются узлами и не находятся в G : networkx находит кратчайший путь между 2 узлами G, если узлы не находятся в G, это не будет работать