Как представить матрицу инцидентности в алгебраической форме?
К примеру, имеется граф в алгебраической форме: (1,2),(1,3),(2,3). Я написал небольшой код для нахождения матрицы инцидентности для этого графа. Теперь мне бы хотелось сделать все наоборот. Из матрицы инцидентности представить граф в алгебраической форме. Как бы это реализовать?
Вот мой код, который показывает матрицу инцидентности:
if __name__ == '__main__':
count_reber = int(input('Введите кол-во ребер: '))
count_vershin = int(input('Введите кол-во вершин: '))
list_reber = []
for i in range(count_reber):
rebro = str(input(f'Введите ребро {i+1}, пример 0,0: ')).split(',')
list_reber.append([int(rebro[0]),int(rebro[1])])
for i in range(count_reber):
print(f'({list_reber[i][0]},{list_reber[i][1]})')
matrix = [[0] * count_vershin for i in range(count_reber)]
for i in range(count_reber):
for j in range(count_vershin):
# print(type(list_reber[i][0]),type(list_reber[i][1]),type(j))
if list_reber[i][0] == j+1 or list_reber[i][1] == j+1:
matrix[i][j] = 1
else:
matrix[i][j] = 0
print(matrix)
for i in range(count_reber):
for j in range(count_vershin):
print(matrix[i][j], end=' ')
print()
Ввожу так:
Ответы (1 шт):
Автор решения: RomanR
→ Ссылка
Для неориентированного графа. В каждом столбце будет только две единицы или одна в случае петли. Добавляем номера строк +1 в список temp - это будет ребро -> добавляем ребра в общий список рёбер
matrix = [[1, 1, 0], [1, 0, 1], [0, 1, 1]]
algForm = []
for i in range(len(matrix[0])):
temp = []
for j in range(len(matrix)):
if matrix[j][i] == 1:
temp.append(j + 1)
if len(temp) == 1: # проверка на петлю
temp.append(temp[0])
algForm.append(tuple(temp))
print(*algForm)
