![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 30.06.2012
Сообщений: 145
|
![]()
Всем доброго времени суток, уважаемые эксперты. Передо мной стоит задача создать игру "Судоку-Жирандоль". Как и в обычном судоку здесь нужно расставить цифры так, чтобы в столбцах не было повторяющихся цифр и в строках тоже. Но данныая игра отличается тем, что на поле есть дополнительные 9 клеток (их координаты всегда одинаковы и они выделяются другим цветом) - там тоже не должно быть повторений.
В обычном судоку я просто по порядку расставляю все цифры в каждой строке, а потом перемешиваю строки, меняя их местами и столбцы. Получается случайное поле якобы. А как мне тут реализовать еще и проверки на эти 9 клеток. Если я добавлю проверки на дублирования и буду перезапускать заново создание - вылетать будут ошибки, так как программа может зациклится. Найти цифры в этих клетках не проблема, найти повторяющиеся там цифры тоже не проблема. Проблема в том как реализовать перестановку строк или столбцов между собой так, чтобы подставить нужные цифры в итоге, не затронув уже нормально расставленные в эти "желтые клетки" цифры... Или может может существуют какие-то более подходящие алгоритмы? Посоветуйте как лучше всего это сделать или в какую сторону мне копать информацию. Заранее спасибо всем откликнувшимся. |
![]() |
![]() |
![]() |
#2 |
Я самый любопытный
Участник клуба
Регистрация: 24.07.2012
Сообщений: 1,978
|
![]()
Вот, готовый код - я им пользуюсь
Код:
|
![]() |
![]() |
![]() |
#3 |
Я самый любопытный
Участник клуба
Регистрация: 24.07.2012
Сообщений: 1,978
|
![]() Код:
|
![]() |
![]() |
![]() |
#4 |
Я самый любопытный
Участник клуба
Регистрация: 24.07.2012
Сообщений: 1,978
|
![]() Код:
|
![]() |
![]() |
![]() |
#5 |
Я самый любопытный
Участник клуба
Регистрация: 24.07.2012
Сообщений: 1,978
|
![]() Код:
Последний раз редактировалось newerow1989; 18.12.2016 в 13:35. Причина: Добавление вложения |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
newerow1989, запустил я ваш код.
думаю, что в данной теме он не подходит: во-первых, он же для решения судоку, а не для изначальной расстановки цифр (создание задания). а во-вторых, он явно не "Судоку-Жирандоль" (он при решении не обеспечивает разные цифры в указанных желтым полях). |
![]() |
![]() |
![]() |
#7 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,542
|
![]()
Из разряда "мысли вслух".
1. расставляем случайно цифры в выделенные клетки. 2. ДОзаполняем строки. Цитата:
Цитата:
мы должны принять некоторые меры, чтобы на выделенных(особых) местах все осталось по прежнему. Для этого если перемещаемые строки содержат особые ячейки, то в дополнение к этому перемещению, делается и перемещение столбцов ТАКИМ образом, чтобы в выделенные и "испорченные" клетки "вернулось" правильное значение. Конечно, перемещение столбцов в свою очередь может затронуть новые "особые" ячейки и теперь мы должны будем еще переместить теперь уже строки для восстановления "порядка". Не уверен, что мы сможем таким образом когда-либо остановиться (в этом-то и вся трудность). P.S. как вариант 1. делаем обычный СУДОКУ. (заполняем перемешиваем) без внимания к тому что получается в "особых" точках. 2. дополнительная перестановка строк/столбцов ДЛЯ УСТАНОВКИ "правильных" значений в особых ячейках (по описанному выше в п.3) правилу. для выбора предпочтительного "донора" использовать строку(столбец) без особых точек. кажется(вовсе в этом не уверен) это можно сделать всегда.
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 19.12.2016 в 16:32. |
||
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
evg_m, согласен, думаю аналогично.
пост выше я написал просто в рамках по борьбе с заблуждениями - чтобы тот, кто пришёл в тему по поиску не решил, что предложенный код имеет отношение именно к варианту "Судоку-Жирандоль". Автор этой темы Armageddets уже, похоже, утратил к ней интерес. А по поводу данной задачи, то тут, ИМХО, есть ещё один "нюанс". Можно заполнить полностью поле цифрами согласно правилам "Судоку-Жирандоль". Но если требуется опубликовать вариант с пустыми клеточками (ну, как в газетах/журналах, где нужно заполнить пропуски - т.е. решить судоку), то нужно скрыть ячейка так, чтобы осталось только одно единственное решение. Если я не ошибаюсь, конечно. p.s. исходную задачу вполне можно решить перебором. И тут даже рекурсивное решение допустимо - глубина вызовов не более 80. |
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Интересно стало)) Рекурсивно случайным подбором вполне хорошо. Вот прикидка. В принципе так и решать можно, задав значения в нужные клетки вместо тех девяти фиксированных. Для решения случайность и не обязательна, просто перебором можно из допустимых значений. Можно и приспособить для проверки - единственное решение или нет. Для составителей это должно быть актуально.
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 20.12.2016 в 15:43. |
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
Аватар, круто! Респект!
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Судоку | FILA | Общие вопросы Delphi | 2 | 20.09.2013 22:48 |
Судоку на C++ | Logg | Помощь студентам | 0 | 20.01.2013 15:39 |
Переделать обычное судоку в судоку чёт-нечёт | Dark Illusion | Общие вопросы Delphi | 0 | 28.03.2012 20:33 |
судоку | sergio11 | C# (си шарп) | 8 | 09.04.2011 21:33 |
Судоку | zmey31313 | Софт | 7 | 13.05.2010 16:12 |