Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Интересные и занимательные задачи по программированию > задача о замке


Автор: Aellipsis 10.10.2011, 14:47
Задано  прямоугольное  поле,  разбитое  на  ячейки.  Некоторые  из ячеек  закрыты,  а  некоторые  открыты.  При  изменении  состояния какойлибо  ячейки,  т.е.  при  ее  закрытии  или  открытии,  все  ячейки, находящиеся  на «кресте» (на  общей  с  ней  вертикали  или  на  общей горизонтали),  меняют  свое  состояние  на  противоположное.  Задача состоит  в  том,  чтобы  путем  переключения  определенных  ячеек открыть  замок,  т.е.  сделать  все  его  ячейки  открытыми.  Перебором данную  задачу  даже  при  относительно  небольших  размерах  замка решить  затруднительно. Однако  она  просто  решается  даже  в  уме  по алгоритму,  основанному  на  существовании  инварианта  в системе замка.

Знает ли кто эту задачу?

Автор: Akina 10.10.2011, 14:58
Обычная игра, одна из разновидностей Quinto...

Автор: fobbos08 18.10.2011, 23:18
Задачка интересная, уже несколько дней думаю как ее записать, вот только не могу придумать. Aellipsis можешь написать принцип решения? Прост очень интересно знать как она решается. smile 

Автор: Akina 19.10.2011, 08:27
Цитата(fobbos08 @  19.10.2011,  00:18 Найти цитируемый пост)
очень интересно знать как она решается.

Принцип - уменьшение размера области парными переворотами (нормализация крайних одной горизонтали и одной вертикали) до приведения области в полосу. Непарный переворот - за счёт угловой клетки на пересечении нормализуемых вертикали и горизонтали.

Автор: Rigid 19.10.2011, 09:10
Алгоритм следующий:
1) запоминаем все ячейки с открытым замком
2) переключаем замки во всех ячейках которые запомнили в пункте 1
3) проверяем, если замок открыт - все ок, иначе двигаем на пункт 1

Обычно решение находится за одну-две итерации

Автор: fobbos08 19.10.2011, 16:34
спасибо
буду пробовать

Автор: fobbos08 24.10.2011, 21:22
возник вопрос, скорее всего я что то не так делаю, но все же
101
101
010
у этого варианта есть решение? так как у меня не получается его решить

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)