Как получить доступ к соседям по краям - PullRequest
1 голос
/ 11 марта 2019

Я пытаюсь реализовать BFS в Python.Мне нужно использовать веса между городами, чтобы рассчитать кратчайший / лучший маршрут.Я не мог понять, как добавить веса к графику, поэтому решил использовать Networkx для Python.Пожалуйста, взгляните на следующий код

import networkx as nx

nodes = ["Arad","Zerind","Oradea","Timisoara","Lugoj","Mehadia"
        "Drobeta", "Sibiu","Rimnicu","Fagaras","Pitesti","Craiova"
        "Neamt","Bucharest","Giurgiu","Urziceni","Vaslui",
        "Iasi","Hirsova","Eforie"]

g ={
    ("Arad", "Sibiu", 140),("Arad", "Zerind", 75),("Arad", "Timisoara", 118),
    ("Zerind", "Oradea", 71),("Oradea", "Sibiu", 151),("Sibiu","Fagaras", 99),
    ("Sibiu", "Rimnicu", 90),("Timisoara","Lugoj", 111),("Lugoj", "Mehadia", 70),
    ("Mehadia","Drobeta",75),("Drobeta", "Craiova", 120), ("Sibiu","Fagaras", 99),
    ("Sibiu", "Rimnicu", 80),("Rimnicu","Pitesti",97),("Rimnicu","Craiova",146),
    ("Fagaras","Bucharest",211),("Pitesti","Bucharest",101),("Bucharest","Giurgiu",90),
    ("Bucharest","Urziceni",85),("Urziceni","Vaslui",142),("Vaslui","Iasi",92),
    ("Iasi","Neamt",87),("Urziceni","Hirsova",98),("Hirsova","Eforie",86)

}

graph = nx.Graph()
print ("Graph created")

for node in nodes:
  graph.add_node(node)

graph.add_weighted_edges_from(g)

for (n1,n2,dat) in graph.edges.data('weight'):
  neibors = graph[n1]
  print (neibors)


Это вывод, я думаю, что все хорошо

Graph created
{'Zerind': {'weight': 75}, 'Timisoara': {'weight': 118}, 'Sibiu': {'weight': 140}}
{'Zerind': {'weight': 75}, 'Timisoara': {'weight': 118}, 'Sibiu': {'weight': 140}}
{'Zerind': {'weight': 75}, 'Timisoara': {'weight': 118}, 'Sibiu': {'weight': 140}}
{'Arad': {'weight': 75}, 'Oradea': {'weight': 71}}
{'Sibiu': {'weight': 151}, 'Zerind': {'weight': 71}}
{'Lugoj': {'weight': 111}, 'Arad': {'weight': 118}}
{'Mehadia': {'weight': 70}, 'Timisoara': {'weight': 111}}
{'Rimnicu': {'weight': 90}, 'Oradea': {'weight': 151}, 'Fagaras': {'weight': 99}, 'Arad': {'weight': 140}}
{'Rimnicu': {'weight': 90}, 'Oradea': {'weight': 151}, 'Fagaras': {'weight': 99}, 'Arad': {'weight': 140}}
{'Craiova': {'weight': 146}, 'Sibiu': {'weight': 90}, 'Pitesti': {'weight': 97}}
{'Craiova': {'weight': 146}, 'Sibiu': {'weight': 90}, 'Pitesti': {'weight': 97}}
{'Bucharest': {'weight': 211}, 'Sibiu': {'weight': 99}}
{'Rimnicu': {'weight': 97}, 'Bucharest': {'weight': 101}}
{'Fagaras': {'weight': 211}, 'Pitesti': {'weight': 101}, 'Giurgiu': {'weight': 90}, 'Urziceni': {'weight': 85}}
{'Fagaras': {'weight': 211}, 'Pitesti': {'weight': 101}, 'Giurgiu': {'weight': 90}, 'Urziceni': {'weight': 85}}
{'Hirsova': {'weight': 98}, 'Vaslui': {'weight': 142}, 'Bucharest': {'weight': 85}}
{'Hirsova': {'weight': 98}, 'Vaslui': {'weight': 142}, 'Bucharest': {'weight': 85}}
{'Urziceni': {'weight': 142}, 'Iasi': {'weight': 92}}
{'Neamt': {'weight': 87}, 'Vaslui': {'weight': 92}}
{'Eforie': {'weight': 86}, 'Urziceni': {'weight': 98}}
{'Rimnicu': {'weight': 146}, 'Drobeta': {'weight': 120}}
{'Lugoj': {'weight': 70}, 'Drobeta': {'weight': 75}}

Теперь я хочу знать, как получить доступ к узлу и егоподключенные узлы таким образом, что я могу использовать для циклического перехода к

  1. чтения узла и проверки, если он исследован
  2. , если нет, получить его дочерние элементы и добавить их в очередь
  3. добавьте их в исследуемый набор и разверните их
  4. Повторяйте процесс до тех пор, пока не будет найдено состояние цели

Я новичок в python и поэтому мне нужна помощь в доступе к элементам данныхиз графика.

...