Networkx не имеет встроенных функций, поэтому вы должны добавить эти ребра вручную.К счастью, networkx.grid_2d
строит узлы как точки с декартовыми координатами.Это значительно упрощает наш код.Вот оно:
# Create 4x4 grid graph
G = nx.grid_2d_graph(4,4)
G.nodes
# Here you can see that nodes are just points with coordinates
NodeView(((0, 1), (1, 2), (3, 2), (0, 0), (3, 3), (3, 0), (3, 1), (1, 1), (2, 1), (0, 2), (2, 0), (1, 3), (2, 3), (2, 2), (1, 0), (0, 3)))
# Set all weights to 1
for edge in G.edges:
G.edges[edge]['weight'] = 1
Если у вас есть 4 точки:
0,0 1,0
0,1 1,1
, вам нужно создать ребра от 0,0
до 1,1
и от 1,0
до 0,1
,Поэтому мы создаем их с помощью weight=1.4
:
G.add_edges_from([
((x, y), (x+1, y+1))
for x in range(3)
for y in range(3)
] + [
((x+1, y), (x, y+1))
for x in range(3)
for y in range(3)
], weight=1.4)
и рисуем график:
nx.draw(G)