В этом видео мы обсудим работу с графами в Python. Давайте начнем. И для этого мы загрузим библиотеку NetworkX, и для краткости давайте загрузим ее с именем nx, тогда у нас во всех функциях будет чуть короче запись. Давайте для начала зададим граф. И как мы это делаем? Во-первых, мы задаем граф вот так вот, а дальше мы добавляем в него ребра и вершины. Мы, на самом деле, можем даже начать с ребер, и тогда вершины добавятся автоматом. И вот как мы можем это делать: чтобы добавить ребро есть специальная команда, мы добавляем ребро командой "add_edge" и добавляем ребро (A, B). Дальше мы можем добавить, на самом деле, сразу много ребер. Если у нас есть список ребер, как вот здесь вот, у нас есть список ребер: (B, C), (C, A), (C, D), (C, E), (D, E), то мы можем составить из них; если у нас есть список, то мы просто подставляем его, команду "add_edges_from", и она добавляет все эти ребра. Мы также можем добавить дополнительно какие-то вершины, а могли и раньше это сделать, в принципе, сначала добавить вершины, потом ребра. Давайте добавим еще вершину F, она в ребрах не участвовала, она ни с кем не соединена, но пусть будет такая вершина. А дальше мы можем, например, получить список всех вершин, получить список всех ребер, можем их напечатать, и, например, можем посчитать количество вершин, количество ребер. Количество вершин — просто "number_of_nodes", количество ребер — "number_of_edges", и тоже их напечатать. Давайте запустим, все это увидим. Действительно, вот у нас список вершин в нашем графе: A, B, C, D, E, F. Вершины A, B, C, D и E добавились, когда мы добавляли ребра, F добавили отдельно. И ребра — вот они здесь, собственно, все добавлены. Число вершин у нас получилось шесть (действительно, нетрудно видеть), число ребер тоже получилось шесть. Вот как бы основные команды для задания и работы с графами. Дальше библиотека позволяет нарисовать граф. То есть мы можем просто запустить команду "draw_networkx", и она нарисует наш граф G. Давайте запустим, посмотрим, что произойдет. Вот граф как-то нарисовался, вершины помечены своими именами — A, B, C, D, E и F. F у нас отдельно, а вершины A и B соединены, A и C соединены, B и C, то есть такой треугольник получается на вершинах A, B и C. И также у нас есть треугольник на вершинах C, D и E. На самом деле, мы этот граф уже видели, он у нас был в лекции, и там он был, конечно, нарисован по-другому. Давайте нарисуем его похоже, чтобы у нас картинка была похожая на то, что было, на то, что нам уже знакомо. Для этого мы задаем позиции всех вершин, также задаем опции, как рисуется граф, я не буду подробно об этом говорить, и задаем размер окна. И, в общем, да, это оформлено как функция, потому что если вдруг нам потребуется потом, мы что-то в графе немножко поменяем, захотим перерисовать, мы просто вызовем эту функцию "draw_G()" (то есть вот здесь описана эта функция), и вот здесь мы ее вызываем. Давайте запустим, и она нарисует граф похоже на то, как у нас было в лекции. Хорошо, давайте еще какие-то простые команды обсудим. Например, нас могут интересовать степени вершин. И тогда, если мы хотим узнать степень вершины в графе, то просто мы вызываем команду "degree" и даем ей конкретную вершину, и она выдаст нам степень у вершины — два. На самом деле, мы можем тут задавать и список вершин, можем, например, запустить ту же команду и без аргументов. И тогда нам выдастся просто список — тут выдастся словарь, где для каждой вершины указана ее степень. И он выдастся вот в таком виде, но можно его переформатировать, чтобы не было этих лишних слов, будет просто словарь. Хорошо. И также мы можем узнать список соседей вершины. И для этого мы просто задаем G и дальше в квадратных скобках пишем вершину, у которой нас интересуют соседи. И опять же, мы преобразуем это в список, получается вот такой список соседей вершины А. Можем для какой-нибудь другой вершины тоже сделать, вот, например, для вершины C список, наверное, будет довольно большой. Действительно, список для вершины C — это и B, и A, и D, и E, то есть четыре соседа у вершины. А у вершины F, например, список соседей будет короткий: он просто пустой, нет соседей у вершины F.