Почему не получается смежный список?
Всем привет! Почему не получается получить список смежных вершин графа?
Вот мой код:
if __name__ == '__main__':
count_reber = 8 #int(input('Введите кол-во ребер: '))
count_versh = 6 #int(input('Введите кол-во вершин: '))
graph = [[1,2],[1,3],[1,4],[2,3],[3,4],[3,6],[4,5],[4,6]]
matrix = []
for i in range(count_versh):
smej = []
for j in range(count_reber):
if graph[j][0] == i+1:
print(graph[j][0],i+1)
smej.append(graph[j][0])
elif graph[j][1] == i+1:
print(graph[j][1],i+1)
smej.append(graph[j][1])
matrix.append(smej)
print(matrix)
Вот что я получаю в результате: [[1, 1, 1], [2, 2], [3, 3, 3, 3], [4, 4, 4, 4], [5], [6, 6]]
Хотя должны быть совершенно другие значения. В чем моя проблема? Подскажите
Исправил:
Ответы (1 шт):
Автор решения: RomanR
→ Ссылка
Я не могу понять что делает Ваш код. Я бы делал через словарь
if __name__ == '__main__':
count_reber = 8 # int(input('Введите кол-во ребер: '))
count_versh = 6 # int(input('Введите кол-во вершин: '))
graph = [[1, 2], [1, 3], [1, 4], [2, 3], [3, 4], [3, 6], [4, 5], [4, 6]]
#создаем словарь с ключом для каждой вершины и пустым списком
m = dict()
for i in range(1, count_versh + 1):
m[i] = []
#идем по списку ребер, добавляем в список обоих вершин их соседа
for i in graph:
m[i[0]].append(i[1])
m[i[1]].append(i[0])
#печатаем
for i in range(1, count_versh + 1):
print(*m[i])
Если нужен список в конце:
print(list(m.values()))
[[2, 3, 4], [1, 3], [1, 2, 4, 6], [1, 3, 5, 6], [4], [3, 4]]
А вот нашел ошибку: В строках smej.append(graph[j][1]) и smej.append(graph[j][0]) нужно индексы заменить местами ( 0 и 1 местами поменять), иначе добавляется сама вершина, а не смежная с ней.
if __name__ == '__main__':
count_reber = 8 # int(input('Введите кол-во ребер: '))
count_versh = 6 # int(input('Введите кол-во вершин: '))
graph = [[1, 2], [1, 3], [1, 4], [2, 3], [3, 4], [3, 6], [4, 5], [4, 6]]
matrix = []
for i in range(count_versh):
smej = []
for j in range(count_reber):
if graph[j][0] == i + 1:
print(graph[j][0], i + 1)
smej.append(graph[j][1])
elif graph[j][1] == i + 1:
print(graph[j][1], i + 1)
smej.append(graph[j][0])
matrix.append(smej)
print(matrix)
