Шаг 51.
Задачи ComputerScience на Python.
Графовые задачи. Работа с Edge и Graph

    На этом шаге мы рассмотрим использование созданной структуры.

    Теперь, когда у нас есть конкретные реализации 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__() с красиво напечатанным описанием графа, теперь можно структурно распечатать (это настоящий термин!) граф. У вас должен получиться результат, подобный следующему:

Сиэтл -> ['Чикаго', 'Сан-Франциско']
Сан-Франциско -> ['Сиэтл', 'Риверсайд', 'Лос-Анджелес']
Лос-Анджелес -> ['Сан-Франциско', 'Риверсайд', 'Феникс']
Риверсайд -> ['Сан-Франциско', 'Лос-Анджелес', 'Феникс', 'Чикаго']
Феникс -> ['Лос-Анджелес', 'Риверсайд', 'Даллас', 'Хьюстон']
Чикаго -> ['Сиэтл', 'Риверсайд', 'Даллас', 'Атланта', 'Детройт']
Бостон -> ['Детройт', 'Нью-Йорк']
Нью-Йорк -> ['Детройт', 'Бостон', 'Филадельфия']
Атланта -> ['Даллас', 'Хьюстон', 'Чикаго', 'Вашингтон', 'Майами']
Майами -> ['Хьюстон', 'Атланта', 'Вашингтон']
Даллас -> ['Феникс', 'Чикаго', 'Атланта', 'Хьюстон']
Хьюстон -> ['Феникс', 'Даллас', 'Атланта', 'Майами']
Детройт -> ['Чикаго', 'Бостон', 'Вашингтон', 'Нью-Йорк']
Филадельфия -> ['Нью-Йорк', 'Вашингтон']
Вашингтон -> ['Атланта', 'Майами', 'Детройт', 'Филадельфия']

    На следующем шаге мы поговорим о поиске кратчайшего пути.




Предыдущий шаг Содержание Следующий шаг