Какие еще функции вы хотели бы иметь в редакторе ломаных линий? Обдумайте, каким образом можно записывать массив ломаных в файл и впоследствии читать его. Также обдумайте, с помощью какого рационального механизма можно было бы добавлять в ломаную новую точку.

Тематическое задание 2.7. Построение и запуск лабиринтов Уровень сложности III.

Задача нахождения пути через лабиринт (maze) будет, вероятно, привлекательной всегда [Ball, 8]. Вы можете создать на компьютере замысловатый лабиринт и с помощью графики следить за его прохождением. На рис. 2.35 показан прямоугольный лабиринт размером 100 строк на 150 столбцов. Цель состоит в том, чтобы найти путь от выхода на левом краю к такому же выходу на правом краю. Хотя и возможно пройти данный лабиринт вручную методом проб и ошибок, все же интереснее разработать алгоритм для автоматического прохождения лабиринта.

Френсис Хилл

Рис. 2.35. Лабиринт Глава 2. Начальная стадия: рисование фигур Напишите и апробируйте программу, которая: О создает и отображает прямоугольный лабиринт из строк и С столбцов; О находит (и отображает) путь через этот лабиринт от начала до конца.

Программа создает лабиринт случайным образом, однако он должен быть правильным: это означает, что каждая его ячейка с координатами (И, С) должна соединяться с любой другой ячейкой единственным, хотя и извилистым путем. Подумайте о лабиринте как о графе, как предлагается на рис. 2.36. Каждый путь представлен ветвью графа; а каждой из ячеек, в которой либо путь заканчивается, либо встречаются два пути, соответствует узел графа. Следовательно, узел существует для каждой ячейки, которая предоставляет выбор вариантов дальнейшего пути. Например, при достижении ячейки (2 существует три варианта, в то время как из ячейки М их только два.

Френсис Хилл

Рис. 2.36. Простой лабиринт и его граф Как следует изображать лабиринт? Один из способов заключается в том, чтобы указывать для каждой ячейки, есть ли у нее сплошная северная стена и сплошная восточная стена, с помощью данных следующей структуры:

char northWall[R][C]. eastWa11[R][C]:


⇐ Предыдущая| |Следующая ⇒