Как связать информацию о вершинах и рёбрах графа между собой, переходя от матрицы смежности к матрице инцидентности?

Какой алгоритм можно использовать для перевода матрицы смежности в матрицу инцидентности? Если у вас есть готовые реализации этого алгоритма (на любом языке программирования), пожалуйста, поделитесь ими.
  • 26 июня 2024 г. 8:42
Ответы на вопрос 2
Для перевода матрицы смежности в матрицу инцидентности можно использовать следующий алгоритм:

1. Создать матрицу с размерностью (количество вершин) x (количество рёбер).
2. Для каждой вершины i и каждого ребра j проверить, является ли вершина i началом или концом ребра j в матрице смежности. Если вершина i соединена ребром j, то в соответствующий элемент матрицы инцидентности записать -1 (если вершина i начало ребра) или 1 (если вершина i конец ребра). Если вершина i не соединена с ребром j, то в элемент матрицы инцидентности записать 0.
3. Полученная матрица и будет матрицей инцидентности.

Реализация данного алгоритма на Python:
```python
def adjacency_to_incidence(adjacency_matrix):
    num_vertices = len(adjacency_matrix)
    num_edges = sum(sum(row) for row in adjacency_matrix) // 2
    incidence_matrix = [[0]*num_edges for _ in range(num_vertices)]
    edge_idx = 0
    
    for i in range(num_vertices):
        for j in range(i+1, num_vertices):
            if adjacency_matrix[i][j] == 1:
                incidence_matrix[i][edge_idx] = -1
                incidence_matrix[j][edge_idx] = 1
                edge_idx += 1
                
    return incidence_matrix

adjacency_matrix = [
    [0, 1, 1],
    [1, 0, 1],
    [1, 1, 0]
]

incidence_matrix = adjacency_to_incidence(adjacency_matrix)
for row in incidence_matrix:
    print(row)
```

Этот код преобразует матрицу смежности, представленную в виде списка списков (adjacency_matrix), в матрицу инцидентности и выводит её на экран.
Алгоритм прост: Итерируетесь по всей матрице смежности. Для каждой единички создаете новый столбец в выходной матрице и ставите там 1 на строках с текущей строкий и столбцом во входной матрице.
Похожие вопросы