На этом шаге мы рассмотрим использование созданной структуры.
Теперь, когда у нас есть конкретные реализации Edge и Graph, можем создать представление потенциальной сети Hyperloop. Вершины и ребра в city_graph соответствуют вершинам и ребрам, представленным на рисунке 2 49 шага. Используя параметризацию, мы можем указать, что вершины будут иметь тип str (Graph[str]). Другими словами, тип str заменяет переменную типа V.
if __name__ == "__main__": # тест простейшей графовой конструкции city_graph: Graph[str] = Graph(["Сиэтл", "Сан-Франциско", "Лос-Анджелес", "Риверсайд", "Феникс", "Чикаго", "Бостон", "Нью-Йорк", "Атланта", "Майами", "Даллас", "Хьюстон", "Детройт", "Филадельфия", "Вашингтон"]) city_graph.add_edge_by_vertices("Сиэтл", "Чикаго") city_graph.add_edge_by_vertices("Сиэтл", "Сан-Франциско") city_graph.add_edge_by_vertices("Сан-Франциско", "Риверсайд") city_graph.add_edge_by_vertices("Сан-Франциско", "Лос-Анджелес") city_graph.add_edge_by_vertices("Лос-Анджелес", "Риверсайд") city_graph.add_edge_by_vertices("Лос-Анджелес", "Феникс") city_graph.add_edge_by_vertices("Риверсайд", "Феникс") city_graph.add_edge_by_vertices("Риверсайд", "Чикаго") city_graph.add_edge_by_vertices("Феникс", "Даллас") city_graph.add_edge_by_vertices("Феникс", "Хьюстон") city_graph.add_edge_by_vertices("Даллас", "Чикаго") city_graph.add_edge_by_vertices("Даллас", "Атланта") city_graph.add_edge_by_vertices("Даллас", "Хьюстон") city_graph.add_edge_by_vertices("Хьюстон", "Атланта") city_graph.add_edge_by_vertices("Хьюстон", "Майами") city_graph.add_edge_by_vertices("Атланта", "Чикаго") city_graph.add_edge_by_vertices("Атланта", "Вашингтон") city_graph.add_edge_by_vertices("Атланта", "Майами") city_graph.add_edge_by_vertices("Майами", "Вашингтон") city_graph.add_edge_by_vertices("Чикаго", "Детройт") city_graph.add_edge_by_vertices("Детройт", "Бостон") city_graph.add_edge_by_vertices("Детройт", "Вашингтон") city_graph.add_edge_by_vertices("Детройт", "Нью-Йорк") city_graph.add_edge_by_vertices("Бостон", "Нью-Йорк") city_graph.add_edge_by_vertices("Нью-Йорк", "Филадельфия") city_graph.add_edge_by_vertices("Филадельфия", "Вашингтон") print(city_graph)
У city_graph есть вершины типа str - мы указываем для каждой название MSA, который она представляет. Последовательность, в которой добавляем ребра в city_graph, не имеет значения. Поскольку мы реализовали __str__() с красиво напечатанным описанием графа, теперь можно структурно распечатать (это настоящий термин!) граф. У вас должен получиться результат, подобный следующему:
Сиэтл -> ['Чикаго', 'Сан-Франциско'] Сан-Франциско -> ['Сиэтл', 'Риверсайд', 'Лос-Анджелес'] Лос-Анджелес -> ['Сан-Франциско', 'Риверсайд', 'Феникс'] Риверсайд -> ['Сан-Франциско', 'Лос-Анджелес', 'Феникс', 'Чикаго'] Феникс -> ['Лос-Анджелес', 'Риверсайд', 'Даллас', 'Хьюстон'] Чикаго -> ['Сиэтл', 'Риверсайд', 'Даллас', 'Атланта', 'Детройт'] Бостон -> ['Детройт', 'Нью-Йорк'] Нью-Йорк -> ['Детройт', 'Бостон', 'Филадельфия'] Атланта -> ['Даллас', 'Хьюстон', 'Чикаго', 'Вашингтон', 'Майами'] Майами -> ['Хьюстон', 'Атланта', 'Вашингтон'] Даллас -> ['Феникс', 'Чикаго', 'Атланта', 'Хьюстон'] Хьюстон -> ['Феникс', 'Даллас', 'Атланта', 'Майами'] Детройт -> ['Чикаго', 'Бостон', 'Вашингтон', 'Нью-Йорк'] Филадельфия -> ['Нью-Йорк', 'Вашингтон'] Вашингтон -> ['Атланта', 'Майами', 'Детройт', 'Филадельфия']
На следующем шаге мы поговорим о поиске кратчайшего пути.