khuseiN

Untitled

Mar 17th, 2023
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.23 KB | None | 0 0
  1. import heapq
  2. import random
  3.  
  4. # Создание графа
  5. graph = {
  6. 1: {2: random.randint(1, 10), 3: random.randint(1, 10), 4: random.randint(1, 10)},
  7. 2: {1: random.randint(1, 10), 5: random.randint(1, 10)},
  8. 3: {1: random.randint(1, 10), 6: random.randint(1, 10)},
  9. 4: {1: random.randint(1, 10), 7: random.randint(1, 10)},
  10. 5: {2: random.randint(1, 10), 8: random.randint(1, 10)},
  11. 6: {3: random.randint(1, 10), 8: random.randint(1, 10)},
  12. 7: {4: random.randint(1, 10), 9: random.randint(1, 10)},
  13. 8: {5: random.randint(1, 10), 6: random.randint(1, 10), 10: random.randint(1, 10), 11: random.randint(1, 10)},
  14. 9: {7: random.randint(1, 10), 11: random.randint(1, 10)},
  15. 10: {8: random.randint(1, 10), 11: random.randint(1, 10)},
  16. 11: {8: random.randint(1, 10), 9: random.randint(1, 10), 10: random.randint(1, 10)}
  17. }
  18.  
  19. # Симметричные матрицы
  20. matrices = [[0 for _ in range(11)] for _ in range(11)]
  21. for i in range(1, 5):
  22. for j in range(1, 5):
  23. matrices[i][j] = graph[i][j]
  24. matrices[j][i] = graph[i][j]
  25. for i in range(5, 8):
  26. for j in range(5, 8):
  27. matrices[i][j] = graph[i][j]
  28. matrices[j][i] = graph[i][j]
  29. for i in range(8, 12):
  30. for j in range(8, 12):
  31. matrices[i][j] = graph[i][j]
  32. matrices[j][i] = graph[i][j]
  33.  
  34. # Алгоритм Дейкстры
  35. def dijkstra(graph, start):
  36. distances = {vertex: float('inf') for vertex in graph}
  37. distances[start] = 0
  38. queue = [(0, start)]
  39. while queue:
  40. current_distance, current_vertex = heapq.heappop(queue)
  41. if current_distance > distances[current_vertex]:
  42. continue
  43. for neighbor, weight in graph[current_vertex].items():
  44. distance = current_distance + weight
  45. if distance < distances[neighbor]:
  46. distances[neighbor] = distance
  47. heapq.heappush(queue, (distance, neighbor))
  48. # Вывод промежуточных результатов
  49. print("Visited:", current_vertex)
  50. print("Distances:", distances)
  51. print()
  52. return distances
  53.  
  54. # Запуск алгоритма Дейкстры с начальной вершиной 1
  55. distances = dijkstra(graph, 1)
Advertisement
Add Comment
Please, Sign In to add comment