Найкоротший шлях II
Тепер, коли у вас є код для перевірки, чи цільова вершина присутня серед сусідів, далі ви розширите цю саму функцію, щоб дописати код для випадку, коли цільової вершини немає серед сусідів.
Увесь код, який потрібно написати, — в блоці else, тобто якщо node2 не належить neighbors.
Ця вправа є частиною курсу
Вступ до аналізу мереж у Python
Інструкції до вправи
- За допомогою методу
.add()додайте поточну вершинуnodeдо множиниvisited_nodes, щоб відстежувати, які вершини вже відвідані. - Додайте до
queueтих сусідів поточної вершиниnode, яких ще не відвідано. Для цього скористайтеся методом.extend()дляqueueразом із включенням списку. Метод.extend()додає всі елементи зі списку.- І вираз-результат, і змінна-ітератор у включенні списку — це
n. Ітерабельний об'єкт — це ітераторneighbors, а умова — якщоnне належить множині відвіданих вершин.
- І вираз-результат, і змінна-ітератор у включенні списку — це
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
def path_exists(G, node1, node2):
"""
This function checks whether a path exists between two nodes (node1, node2) in graph G.
"""
visited_nodes = set()
queue = [node1]
for node in queue:
neighbors = G.neighbors(node)
if node2 in neighbors:
print('Path exists between nodes {0} and {1}'.format(node1, node2))
return True
else:
# Add current node to visited nodes
____
# Add neighbors of current node that have not yet been visited
queue.extend([____ for ____ in ____ if ____ not in ____])