![]() |
|
![]() ![]() ![]() |
|
unkis |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 802 Регистрация: 8.9.2004 Репутация: нет Всего: 1 |
Ребята здраствуйте!
Тут есть одна интересна игра называется Судоку(Sudoku). Информация о игре здесь Предлогаю на форуме обсудить алгоритмы её решения, не просто тупой перебо, а какие-нибудь алгоритмы связаные с KI Зарания всем благодарен. -------------------- www.unkis.com |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
ну подобные задачи чаще всего решаются перебором с какими-нибудь модификациями
самая частая модификация - отсечение какого-нибудь множества вариантов еще один вариант - перебор в каком-то определенном порядке тут сразу же добавляется отсечение - проверка корректности после каждой поставленной цифры дальше, как мне кажется, нелишним будет упорядочвание перебора: сначала искать те клетки, где количество вариантов наименьшее если оно - 0, сразу ясно, что надо делать откат если 1 - и перебора никакого нету 2 - перебрать два варианта это немного замедлит рост количества вариантов по мере углубления... -------------------- qqq |
|||
|
||||
unkis |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 802 Регистрация: 8.9.2004 Репутация: нет Всего: 1 |
Я тут в интернете почитал многие к этой проблемме подходят с матиматической точке зрения, некотыре испльзуют какой-то Sword Fish
Кто что про эти методы знает. -------------------- www.unkis.com |
|||
|
||||
XbiT |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 9.2.2006 Репутация: 1 Всего: 1 |
писал пару дней назад перебор на эту задачу, но для поля 5*5 он загибался. 4*4моментально работает.
|
|||
|
||||
daNick |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 12.8.2006 Где: Казахстан, Астана Репутация: нет Всего: нет |
А скажите лучьше, как генерить это самое поле 9х9?
--------------------
Долго не кончать - преимущество мужчины, а не оратора.Я так много читал о вреде курения, что решил бросить... читать.(с) Сергей Довлатов |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
По-моему более разумно не заниматься перебором, а строить трехмерный массив вариантов расположения с удалением невозможных.
В случае когда решение единственное, за все решение потребуется максимум 2-3 предположения. К тому же несложно организовывать откат и, следовательно, рекурсивный поиск. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
nostromo |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 23.3.2006 Репутация: 5 Всего: 10 |
Пара реализаций решателя sudoku на Erlang:
http://www.erlang-consulting.com/obfuscatederlang.html http://www.mail-archive.com/[email protected]/msg00274.html --------------------
На пыльных тропинках далеких планет останутся наши следы. |
|||
|
||||
boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: нет Всего: 35 |
Генерил рекурсией. Есть даче код на Jave, отрабатывает за доли секунды. -------------------- Никогда не говори никогда |
|||
|
||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: нет Всего: 181 |
Есть еще dancing links algorithm Кнута, смотри линк, там есть пример для судоку
-------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
daNick |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 12.8.2006 Где: Казахстан, Астана Репутация: нет Всего: нет |
boevik, на ВБ можешь сделать исходники?
--------------------
Долго не кончать - преимущество мужчины, а не оратора.Я так много читал о вреде курения, что решил бросить... читать.(с) Сергей Довлатов |
|||
|
||||
boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: нет Всего: 35 |
В принципе, не должно быть проблемным.
Можешь и сам попробовать, код не сложный. -------------------- Никогда не говори никогда |
|||
|
||||
daNick |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 12.8.2006 Где: Казахстан, Астана Репутация: нет Всего: нет |
boevik, я пытался сам, но у меня нифига не вышло. Даже на сайте посвященному чисто программированию судоку исходники рабоают неправильно. Т.е. лбо по вертикали, либо по горизонтал, либо в блоках цифры повторяются.Так что, если не жалко, помоги?
--------------------
Долго не кончать - преимущество мужчины, а не оратора.Я так много читал о вреде курения, что решил бросить... читать.(с) Сергей Довлатов |
|||
|
||||
boevik |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: нет Всего: 35 |
Выкладываю исходники на Java, будут затруднения пиши:
Всё начинается с запуска
результатом является заполненое поле table. Если надо получить поля для отгадывания, то есть другая функция которая рандомально затирает цифры в заполненом поле. Удачи -------------------- Никогда не говори никогда |
||||
|
|||||
daNick |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 12.8.2006 Где: Казахстан, Астана Репутация: нет Всего: нет |
Спасибо. Попытаюсь разобраться. Хотя я в Яве не шарю, я васче кроме вб и паскаля нде ни шарю, но это дело поправимое.
--------------------
Долго не кончать - преимущество мужчины, а не оратора.Я так много читал о вреде курения, что решил бросить... читать.(с) Сергей Довлатов |
|||
|
||||
daNick |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 12.8.2006 Где: Казахстан, Астана Репутация: нет Всего: нет |
Переложил на VB, ни фига не работает. Переменная digit принимает значения большее 9. Почему так?
--------------------
Долго не кончать - преимущество мужчины, а не оратора.Я так много читал о вреде курения, что решил бросить... читать.(с) Сергей Довлатов |
|||
|
||||
boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: нет Всего: 35 |
Выкладывай кодна VB, с VB я немного знаком.
-------------------- Никогда не говори никогда |
|||
|
||||
boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: нет Всего: 35 |
digit%10 -> digit mod 10 - это выполнил? -------------------- Никогда не говори никогда |
|||
|
||||
ip127001 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 24.11.2006 Где: Omsk Репутация: нет Всего: -1 |
самый разумный алгоритм...сначало заполнить матрицу...потом сохранить ее в вирт массиве.
и в зависимости от сложности отчистить ее, оставив нужное количество цифер --------------------
aqua currit et debere currere ut currere solebat |
|||
|
||||
V.A.KeRneL |
|
|||
![]() Vadim A. Kazantsev ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 3.12.2006 Где: Moscow, Russia Репутация: 1 Всего: 14 |
http://ru.wikipedia.org/wiki/Судоку
http://ru.wikipedia.org/wiki/Обобщённое_судоку http://en.wikipedia.org/wiki/Sudoku http://en.wikipedia.org/wiki/Mathematics_of_Sudoku http://fr.wikipedia.org/wiki/Sudoku Да, и не забывайте, что задача обобщённого судоку NP-полна => полиномиального решения не существует (по крайней мере, до тех пор, пока мы глобально не пересмотрим существующую теорию вычислений). Лучший здесь вариант -- это, имхо, оптимизированный «умный» перебор. Это сообщение отредактировал(а) V_A_KeRneL - 29.12.2006, 09:42 -------------------- «C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы» ---/)/)---(\.../)---(\(\ --(':'=)---(=';'=)---(=':') (")(")..)-(").--.(")-(..(")(") |
|||
|
||||
Magister Y0da |
|
|||
![]() Зелёненький ![]() Профиль Группа: Участник Сообщений: 235 Регистрация: 30.11.2004 Репутация: 2 Всего: 2 |
--------------------
|
|||
|
||||
SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Ох. С Си плохо знаком, а еще и написано нечитабельно ![]() Кто нибудь в Алгол может перевести? -------------------- Всем добра ![]() |
|||
|
||||
Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 162 |
Вот алгоритм boevik переписанный на Delphi:
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
Vsts |
|
||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 10.1.2007 Репутация: нет Всего: 1 |
Помоему прога от "boevik" много лишнего делает.
Алгоритм можно упростить.
Пусть есть матрица ,удовлетворяющая правилам судоку . Например А = ------------------------------- | 0 3 6 | 1 4 7 | 2 5 8 | | | | | | 1 4 7 | 2 5 8 | 0 3 6 | | | | | | 2 5 8 | 0 3 6 | 1 4 7 | +---------|---------|---------| | 3 6 0 | 4 7 1 | 5 8 2 | | | | | | 4 7 1 | 5 8 2 | 3 6 0 | | | | | | 5 8 2 | 3 6 0 | 4 7 1 | +---------|---------|---------| | 6 0 3 | 7 1 4 | 8 2 5 | | | | | | 7 1 4 | 8 2 5 | 6 0 3 | | | | | | 8 2 5 | 6 0 3 | 7 1 4 | +---------|---------|---------| что бы получить новую, достаточно в этой поменять две строчки (или столбца) местами, при уловии что они обе принадлежат [ 0 , 2 ] [ 3 , 5 ] [ 6 , 8 ] . Причем , результат от того в каком порядке их переставлять( сначала только столбцы, строки, или в перемешку). так например меняем первую(нулевую) строку со второй(первой), 4(3) столбец с 6(5) --------------------------------- | 1 4 7 | 8 5 2 | 0 3 6 | | | | | | 0 3 6 | 7 4 1 | 2 5 8 | | | | | | 2 5 8 | 6 3 0 | 1 4 7 | +---------|----------|---------| | 3 6 0 | 1 7 4 | 5 8 2 | | | | | | 4 7 1 | 2 8 5 | 3 6 0 | | | | | | 5 8 2 | 0 6 3 | 4 7 1 | +---------|---------|---------| | 6 0 3 | 4 1 7 | 8 2 5 | | | | | | 7 1 4 | 5 2 8 | 6 0 3 | | | | | | 8 2 5 | 3 0 6 | 7 1 4 | +---------|---------|---------|
Других елементарных преобразований я пока не нашел.Возможно ими можно все описать. И еще не посчитал,сколько порождающих элементов есть.(Извеняюсь если это уже в статях есть,но все просматривать не было времени, да и язык буржуйский ![]() ПыСы : математика это хАрАшо, тока за неё не платят... ![]() Это сообщение отредактировал(а) Vsts - 10.1.2007, 22:17 |
||||
|
|||||
boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: нет Всего: 35 |
Совершенно врно, прога делает много лишнего - в нее уже заложены инструменты для других решений. К примеру, 1) можно задать начальную мартицу и найти все возможные решения решения; 2) производить проверку ввода юзером и т.д и т.п. -------------------- Никогда не говори никогда |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |