Слайд 2Постановка задачи
Мудрый тритон работает почтальоном в Лукоморье. В перечень его обязанностей входит
доставка корреспонденции птицам, разместившим свои гнезда на ветвях дуба
Если его путь проходит через чье-либо гнездо, и его обитатели не получают при этом корреспонденции, ему приходится извиняться за доставленные неудобства
Нуобходимо написать программу, которая по описанию мест обитания птиц и списку корреспонденции определяет, сколько раз придется извиняться мудрому тритону
Слайд 3Языком теории графов
Дано направленное дерево, вершины имеют положительные веса, необходимо совершить обход
графа из первой вершины во все остальные (одним проходом) так, чтобы посетить все ненулевые вершины. При проходе вершины её вес уменьшается на 1. Вывести модуль суммы вершин с отрицательными весами.
Слайд 4Определение идеи алгоритма,
выбор методов решения и структур данных
Так как количество гнёзд неизвестно,
будет удобно использовать динамические деревья, причём набор ссылок на дочерние ветви хранить в векторе ссылок.
Для реализации списка опишем структуру Тree, в которой будем хранить количество корреспонденции, необходимой доставить и вектор ссылок на дочерние ветви.
Также определим тип PTree – указатель на эту структуру.
Слайд 62. Идя от корня сперва проверяем, есть ли на данной ветви хоть
одна ненулевая вершина, если нет, завершаем обход данной ветви.
Слайд 73. Если вершина положительная, уменьшаем кол-во корреспонденции данной вершины на 1, если
же вес равен 0, тритон должен извинится => увеличиваем счетчик на 1
Слайд 84. Когда обход закончен, выводим как результат значение переменной счетчика
Слайд 9Тестирование программы
Для выявления правильности работы алгоритма будет достаточно следующего набора тестов:
0. Дано
дерево на 1 вершине
1. Даны такие веса вершин, что можно обойти все гнезда, не извинившись не разу
2. Даны такие веса вершин, что в некоторые ветви не нужно заходить, т.к. они нулевые, другие же начинаются как нулевые, но на самом деле содержат ненулевую вершину
3. Дано случайное дерево
4. Ошибка ввода
Слайд 183.2
Не думал, что так полюблю рекурсию
Слайд 19Ошибки ввода
4.0: // Буква вместо цифры
Input.txt
а
1 2 2
1 3 1
Output.txt
Error
4.1: //Отрицательный вес
вершины
Input.txt
3
1 2 2
2 3 1 3
2 -2 1 2
Output.txt
Error