Определение идеи алгоритма, выбор методов решения и структур данных. Деревья

Содержание

Слайд 2

Постановка задачи

Мудрый тритон работает почтальоном в Лукоморье. В перечень его обязанностей входит

Постановка задачи Мудрый тритон работает почтальоном в Лукоморье. В перечень его обязанностей
доставка корреспонденции птицам, разместившим свои гнезда на ветвях дуба
Если его путь проходит через чье-либо гнездо, и его обитатели не получают при этом корреспонденции, ему приходится извиняться за доставленные неудобства
Нуобходимо написать программу, которая по описанию мест обитания птиц и списку корреспонденции определяет, сколько раз придется извиняться мудрому тритону

Слайд 3

Языком теории графов

Дано направленное дерево, вершины имеют положительные веса, необходимо совершить обход

Языком теории графов Дано направленное дерево, вершины имеют положительные веса, необходимо совершить
графа из первой вершины во все остальные (одним проходом) так, чтобы посетить все ненулевые вершины. При проходе вершины её вес уменьшается на 1. Вывести модуль суммы вершин с отрицательными весами.

Слайд 4

Определение идеи алгоритма, выбор методов решения и структур данных

Так как количество гнёзд неизвестно,

Определение идеи алгоритма, выбор методов решения и структур данных Так как количество
будет удобно использовать динамические деревья, причём набор ссылок на дочерние ветви хранить в векторе ссылок.
Для реализации списка опишем структуру Тree, в которой будем хранить количество корреспонденции, необходимой доставить и вектор ссылок на дочерние ветви.
Также определим тип PTree – указатель на эту структуру.

Слайд 5

1. Строим дерево

1. Строим дерево

Слайд 6

2. Идя от корня сперва проверяем, есть ли на данной ветви хоть

2. Идя от корня сперва проверяем, есть ли на данной ветви хоть
одна ненулевая вершина, если нет, завершаем обход данной ветви.

Слайд 7

3. Если вершина положительная, уменьшаем кол-во корреспонденции данной вершины на 1, если

3. Если вершина положительная, уменьшаем кол-во корреспонденции данной вершины на 1, если
же вес равен 0, тритон должен извинится => увеличиваем счетчик на 1

Слайд 8

4. Когда обход закончен, выводим как результат значение переменной счетчика

4. Когда обход закончен, выводим как результат значение переменной счетчика

Слайд 9

Тестирование программы

Для выявления правильности работы алгоритма будет достаточно следующего набора тестов:
0. Дано

Тестирование программы Для выявления правильности работы алгоритма будет достаточно следующего набора тестов:
дерево на 1 вершине
1. Даны такие веса вершин, что можно обойти все гнезда, не извинившись не разу
2. Даны такие веса вершин, что в некоторые ветви не нужно заходить, т.к. они нулевые, другие же начинаются как нулевые, но на самом деле содержат ненулевую вершину
3. Дано случайное дерево
4. Ошибка ввода

Слайд 18

3.2

Не думал, что так полюблю рекурсию

3.2 Не думал, что так полюблю рекурсию

Слайд 19

Ошибки ввода

4.0: // Буква вместо цифры
Input.txt
а
1 2 2
1 3 1
Output.txt
Error
4.1: //Отрицательный вес

Ошибки ввода 4.0: // Буква вместо цифры Input.txt а 1 2 2
вершины
Input.txt
3
1 2 2
2 3 1 3
2 -2 1 2
Output.txt
Error