Guest User

Untitled

a guest
Jun 25th, 2018
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. def make_graph(arr, n):
  2. # Создает словарь перекрестков:
  3. # {перекресток: {связанный перекресток: шанс выжить, ...}}
  4. graph = {i: {} for i in range(1, n+1)}
  5. for i in arr:
  6. graph[i[0]][i[1]] = i[2]
  7. graph[i[1]][i[0]] = i[2]
  8. return graph
  9.  
  10.  
  11. def route(arr, n):
  12. g = make_graph(arr, n)
  13. pos = 1 # Текущая позиция.
  14. way = [1] # Пройденный путь.
  15. surv = 100 # Шанс выжить.
  16. surv_hist = [100] # Шансы выживания на каждом шаге.
  17. while pos != n:
  18. m = max(g[pos].values())
  19. new_p = list(g[pos].keys())[list(g[pos].values()).index(m)]
  20. surv = surv * m / 100
  21. g[pos][new_p] = 0
  22. # Шанс выживания для улицы обнуляется, чтобы мышь не бегала кругами
  23. if new_p in way:
  24. # Если мышь вернулась на перекресток, на котором уже была,
  25. # весь пройденный путь, после первого посещения этого перекрестка
  26. # удаляется.
  27. del way[(way.index(new_p))+1:]
  28. del surv_hist[(way.index(new_p))+1:]
  29. surv = surv_hist[-1]
  30. else:
  31. pos = new_p
  32. way.append(pos)
  33. surv_hist.append(round(surv, 2))
  34. return ' - '.join(str(i) for i in way), round(surv, 2)
  35.  
  36.  
  37. N = 4
  38. RoadOfDeathArr = ((1, 2, 98), (1, 3, 50), (1, 4, 20), (2, 4, 99), (3, 4, 70))
  39.  
  40. way, ch = route(RoadOfDeathArr, N)
  41. print('Безопасный маршрут: ' + way)
  42. print('Вероятость спасения на маршруте: ' + str(ch))
Add Comment
Please, Sign In to add comment