Skip to main content

Библиотека для работы с графами и алгоритмами на них.

Project description

Graf: Библиотека для работы с графами и алгоритмами

Graf - это библиотека Python, предоставляющая инструменты для работы с графами и реализации различных алгоритмов на них. Она включает в себя алгоритмы Дейкстры, Флойда-Уоршалла, поиска Эйлерова цикла, а также возможность читать и визуализировать графы из файлов формата DOT.

Установка

Для установки Graf-Lab-4-Py, используйте pip:

pip install Graf-Lab-4-Py

Зависимости

Graf зависит от следующих библиотек:

  • networkx - для работы с графами, например для создания, добавления ребер, расположения узлов и отображения.
  • matplotlib - для визуализации графов.
  • numpy - для хранения и манипулирования числовыми данными (матрицами) для графов.

Эти зависимости будут установлены автоматически при установке пакета с помощью pip. # Будут же?

Модули

Библиотека состоит из следующих модулей:

• Graf.Algorithm.floyd_warshall: Реализация алгоритма Уоршалла-Флойда.

• Graf.Algorithm.dijkstra: Реализация алгоритма Дейкстры.

• Graf.Algorithm.euler: Реализация нахождение Эйлерова цикла.

• Graf.Matrix.Vis_matrix: Реализация базовой структуры графа с помощью класса Graph (c методами для добавления ребер) и вывода матрицы весов.

• Graf.Matrix.Incidence_matrix: Реализация вывода матрици инцидентности.

• Graf.Matrix.Adjacency_matrix: Реализация вывода матрици смежности.

Использование

Алгоритм Дейкстры

python
from Graf.Algorithm.dijkstra import dijkstra

graph = {
    'A': {'B': 1, 'C': 4},
    'B': {'A': 1, 'C': 2, 'D': 5},
    'C': {'A': 4, 'B': 2, 'D': 1},
    'D': {'B': 5, 'C': 1}
}

start_vertex = 'A'
shortest_distances = dijkstra(graph, start_vertex)

print(shortest_distances) # Выведет {'A': 0, 'B': 1, 'C': 3, 'D': 4}

Алгоритм Уоршалла-Флойда

Для работы алгоритма необходимо создать файл graph.dot с описанием графа в формате DOT

Пример: u -> v [label="w"], где u - начальная вершина, v - целевая вершина, w - вес ребра

# digraph G {
#   1 -> 2 [label="5"];
#   2 -> 3 [label="1"];
#   3 -> 1 [label="2"];
# }
python
from Graf.floyd_warshall import floyd_warshall
from Graf.graph_utils import read_graph_from_dot

graph = read_graph_from_dot("graph.dot")
shortest_paths = floyd_warshall(graph)

# Результат в shortest_paths - матрица кратчайших расстояний
with open("shortest_paths.txt", 'w', encoding='utf-8') as f:
    for i in range(len(graph)):
        for j in range(len(graph)):
            if shortest_paths[i][j] == float('inf'):
                f.write(f"Расстояние от {i + 1} до {j + 1}: ∞\n")
            else:
                f.write(f"Расстояние от {i + 1} до {j + 1}: {shortest_paths[i][j]}\n")
print("Кратчайшие пути (Флойд-Уоршалл) записаны в shortest_paths.txt")

Нахождениие Эйлерова цикла

# Находим Эйлеров цикл
eulerian_cycle = find_eulerian_cycle(graph, start_vertex)

# Вывод результата
if eulerian_cycle:
    print("Эйлеров цикл:", eulerian_cycle)
else:
    print("Эйлеров цикл не существует.")


Визуализация графа для алгоритм Уоршалла-Флойда

Для визуализации графа необходимо прочитать его из файла .dot.

python
from Graf.floyd_warshall import read_graph_from_dot, draw_graph

graph = read_graph_from_dot("graph.dot")
draw_graph(graph)

Вывод матрици весов

python
g = Graph(4)
g.add_edge(0, 1, 10)
g.add_edge(0, 2, 15)
g.add_edge(1, 2, 20)
g.add_edge(2, 3, 30)

# выводим матрицу весов
g.print_matrix()

Вывод матрици инцидентности

python
graph = {
        'A': ['B', 'C'],
        'B': ['A', 'D', 'E'],
        'C': ['A', 'F'],
        'D': ['B'],
        'E': ['B', 'F'],
        'F': ['C', 'E']
    }

inc_matrix = incidence_matrix(graph)
print("\nМатрица инцидентности:")
print(inc_matrix)

Вывод матрици смежности

python
g = Graph(4)
g.add_edge(0, 1, 10)
g.add_edge(0, 2, 15)
g.add_edge(1, 2, 20)
g.add_edge(2, 3, 30)

# выводим матрицу весов
g.print_matrix()

Автор

• Садова Диана • Жукова Арина

Лицензия

Этот проект лицензирован под MIT License.

Дополнительная информация

Пожалуйста, посетите страницу проекта на GitHub для получения дополнительной информации и кода.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

graf_lab_4_py-1.0.3.tar.gz (8.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

Graf_Lab_4_Py-1.0.3-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

File details

Details for the file graf_lab_4_py-1.0.3.tar.gz.

File metadata

  • Download URL: graf_lab_4_py-1.0.3.tar.gz
  • Upload date:
  • Size: 8.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.7

File hashes

Hashes for graf_lab_4_py-1.0.3.tar.gz
Algorithm Hash digest
SHA256 21ee0fbca53c78e8400a1e2df36bf6e31ae074afc048c92b56ebe183d54a4b3f
MD5 5d2d7f1f8e051b879386eb3610bf9bf6
BLAKE2b-256 9332dd896f98ce0a3fd4ad8e1d4dd136f67227b9f555c24e373bda80528b5e9f

See more details on using hashes here.

File details

Details for the file Graf_Lab_4_Py-1.0.3-py3-none-any.whl.

File metadata

  • Download URL: Graf_Lab_4_Py-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 10.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.7

File hashes

Hashes for Graf_Lab_4_Py-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2e5d12560a6fc1dcf31634e8c4eb564670317a44973a1755289657e9d5df54ad
MD5 c4e5e033adc93e9558773cb24ce2e413
BLAKE2b-256 50a0f45d5fc2abaccd194eddb82018ef5a8d063c3c036b128053c0ab5c561ae9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page