Третий матч в google для «C ++ slicing» дает мне эту статью в Википедии http://en.wikipedia.org/wiki/Object_slicing и этот (нагретый, но первые несколько сообщений определяют проблему ): http://bytes.com/forum/thread163565.html
Таким образом, это когда вы назначаете объект подкласса суперклассу. Суперкласс ничего не знает о дополнительной информации в подклассе и не имеет места для его хранения, поэтому дополнительная информация получает «отрезанный».
Если эти ссылки не дают достаточной информации для «хороший ответ», пожалуйста, отредактируйте свой вопрос, чтобы сообщить нам, что еще вы ищете.
Ваша adjacencyList
конструкция неверна.
Заменить adjacencyList[i[0]].append(i[0])
на adjacencyList[i[0]].append(i[1])
. Я не вижу никаких петель внутри другого. Ваша сложность времени составляет O(n)
.
Цель adjacencyList
- сохранить все смежные узлы для данного узла, в вашем случае это индекс списка.
После изменения ваш вывод должен быть
[[1, 2], [0, 3], [0, 4, 5], [1], [2, 6], [2], [4]]
blockquote>Отсюда вы можете интерпретировать, что 0 имеет 1 и 2 в качестве соседей. 2 имеет 0 и 3 соседей, 3 имеет 0,4 и 5 в качестве соседей и т. Д.
Обратите внимание, что этот подход не работает, если у вас есть такие узлы, как {2, 60, 1000, 4}. В этом случае лучше использовать словарь узлов и список соседей.