ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.12.2023
Просмотров: 2368
Скачиваний: 17
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
-
итак, условию удовлетворяет только одна клетка – F4 -
таким образом, правильный ответ – 1.
-
Возможные ловушки и проблемы:-
вариантов может быть достаточно много, важно не пропустить ни один из них -
можно попытаться выполнить алгоритм для каждой клетки лабиринта, но это займет много времени; поэтому лучше ограничиться только клетками-кандидатами -
нужно правильно определить свойства, по которым клетку можно считать «кандидатом» -
можно не заметить стенку и таким образом получить лишнее решение
-
Еще пример задания:
| | | | | | 6 |
| | | | | | 5 |
| | | | | | 4 |
| | | | | | 3 |
| | | | | | 2 |
| | | | | | 1 |
A | B | C | D | E | F | |
вверх вниз влево вправо.
При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:
сверху свободно снизу свободно
слева свободно справа свободно
Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку. Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ уцелеет (не врежется в стену) и остановится в той же клетке, с которой он начал движение?
1) 1 2) 2 3) 3 4) 0
НАЧАЛО
ПОКА <слева свободно> вверх
ПОКА <сверху свободно> вправо
ПОКА <справа свободно> вниз
ПОКА <снизу свободно> влево
КОНЕЦ
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
-
особенность этой задач в том, что РОБОТ проверяет стенку в одном направлении, а движется в другом -
рассмотрим первый цикл:
ПОКА <слева свободно> вверх
понятно, что при движении вверх РОБОТ остановится в первой же клетке
, где слева будет стена
-
рассуждая аналогично, находим, что во втором цикле при движении вправо РОБОТ останавливается в клетке, где есть стена сверху; в третьем цикле (движение вниз) РОБОТ останавливается в клетке, где есть стена справа; -
наконец, в четвертом цикле РОБОТ останавливается в клетке, где есть стена снизу; при этом он должен попасть обратно в исходную клетку, обозначенную на рисунке красной точкой; -
кроме этих четырех стенок, необходимо, чтобы коридор, выделенный на рисунке зеленым фоном, был свободен для прохода, иначе РОБОТ врежется в стенку -
теперь отметим на карте все клетки-кандидаты, где снизу есть стена:
| | | | | | 6 |
| | | | | | 5 |
| | | | | | 4 |
| | | | | | 3 |
| | | | | | 2 |
| | | | | | 1 |
A | B | C | D | E | F | |
-
при движении из клеток B5, D1, E1, E6, F1 и F3 РОБОТ врежется в стенку, потому что слева стены нет и условие «слева свободно» всегда истинно:
6
5
4
3
2
1
A
B
C
D
E
F
-
начав движение с клетки A1, C1 или C2, РОБОТ также врезается в стенку и разрушается:
| | | | | | 6 |
| | | | | | 5 |
| | | | | | 4 |
| | | | | | 3 |
| | | | | | 2 |
| | | | | | 1 |
A | B | C | D | E | F | |
-
и только путь, начатый в клетке B1, приводит РОБОТА обратно в точку старта:
| | | | | | 6 |
| | | | | | 5 |
| | | | | | 4 |
| | | | | | 3 |
| | | | | | 2 |
| | | | | | 1 |
A | B | C | D | E | F | |