Почему не получается смежный список?

Всем привет! Почему не получается получить список смежных вершин графа?

Вот мой код:

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)
→ Ссылка