-
Notifications
You must be signed in to change notification settings - Fork 0
/
shortest_path.py
63 lines (52 loc) · 1.87 KB
/
shortest_path.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import networkx as nx
from collections import deque
# Створення графа
G = nx.Graph()
# Додавання вершин та ребер
edges = [
("A", "B"),
("A", "C"),
("B", "D"),
("C", "E"),
("C", "G"),
("D", "F"),
("E", "G"),
("F", "H"),
("G", "I"),
("H", "I"),
("H", "J"),
("D", "J"),
("E", "J"),
]
G.add_edges_from(edges)
# Реалізація алгоритму BFS для знаходження найкоротшого шляху
def bfs_shortest_path(graph, start, goal):
# Черга для зберігання шляхів
queue = deque([[start]])
# Множина для відвіданих вершин
visited = set()
while queue:
# Беремо перший шлях з черги
path = queue.popleft()
# Остання вершина в поточному шляху
node = path[-1]
# Якщо ми дісталися мети, повертаємо шлях
if node == goal:
return path
# Якщо вершина ще не відвідана, перевіряємо її сусідів
elif node not in visited:
for neighbor in graph.neighbors(node):
new_path = list(path)
new_path.append(neighbor)
queue.append(new_path)
# Позначаємо вершину як відвідану
visited.add(node)
# Якщо шляху не знайдено
return None
if __name__ == "__main__":
# Використання BFS для знаходження найкоротшого шляху від 'A' до 'J'
shortest_path = bfs_shortest_path(G, "A", "J")
if shortest_path:
print("Найкоротший шлях від A до J:", " -> ".join(shortest_path))
else:
print("Шлях не знайдено")