|
|
Знаете ли Вы, что ... | |
...до того как открыть новую тему, стоит использовать поиск: такая тема уже может существовать. | |
<< Предыдущий совет - Случайный совет - Следующий совет >> |
Разминка для мозгов Загадки, задачи, головоломки - тренируем мозг |
Ответить |
|
Опции темы | Опции просмотра |
02.02.2011 12:43 | #22 |
програмщег
Сообщений: 4,971
+ 2,743
5,086/2,116
– 69
99/68
|
Представим судоку как двумерный массив a[0..2,0..2](большой 3х3 квадрат). Каждый элемент массива содержит двумерный массив b[0..2,0..2](маленький 3х3 квадрат). У нас получается 4мерный массив. a[r,t,x,y]
r: Row number. Номер строки на большом квадрате (0..2) t: Column number. Номер колонки на большом массиве (0..2) x: Х координата. Номер строки на маленьком квадрате (0..2) y: У кородината. Номер колонки на маленьком массиве (0..2). Для каждой пустой клетки находим доступные цифры которые не встречаются на колонке, на строке и на маленьком квадрате на которым находятся текущая клетка. (в нашем примере проверяемые клетки на строке/колонке/квадрате при наведение курсора выделяется розовым цветом, не проверяемые желтым) У меня получился вот это: http://examplecodes.narod2.ru/html/sudoku/
__________________
Ошибки прошлого, мудрость будущего. (с)Д.Тернер. Последний раз редактировалось OmoN; 02.02.2011 в 12:50. |
|
Ответить |
"+" от:
|
02.02.2011 14:31 | #23 |
ex-wild_John
Супермодератор |
Простая задачка:
Есть десятичное число n, его записали в двоичном виде. Есть число m такое, что его двоичная запись зеркальна двоичной записи числа n. Например: n=13 (1101) m=11 (1011). Найти минимальное n, при котором m будет больше n в 1.5 раза. 1. при условии, что оба числа необязательно должны начинаться с единицы. Например n=10 (1010) m=5 (0101). 2. при условии, что оба числа обязательно должны начинаться с единицы.
__________________
Герман - это не имя, это особое состояние души (Джим Анджер) |
|
Ответить |
03.02.2011 11:12 | #25 |
програмщег
Сообщений: 4,971
+ 2,743
5,086/2,116
– 69
99/68
|
Да. Это слабое место алгоритма. Для каждой клетки находить ряд доступных цифр и выбирает первый из них. Если заметили когда кликните на клетку она показывает только доступные цифры. У кого нибудь есть идея?
__________________
Ошибки прошлого, мудрость будущего. (с)Д.Тернер. |
|
Ответить |
03.02.2011 13:30 | #27 |
|
У JH была не плохая идея, точнее не полный алгоритм, только сначала обычно проверяют совместность одинаковых цифр, а несовместность цифры в данной ячейке.
Факт, что не все Судоку решаются без перебора, однако обычно таких переборов в глубину бывает не более одного или двух шагов в глубину даже для самых сложных Судоку (например то, на которой я ваше решение тестировал). Т.е. последовательный анализ должен давать значительную часть разрешимых и однозначных Судоку.
__________________
Тот факт, что медуза выжила 650 миллионов лет без мозгов, даёт надежду многим. |
|
Ответить |
03.02.2011 14:40 | #28 | |
ex-wild_John
Супермодератор |
Цитата:
Создаётся трёхмерный массив - координаты клетки и возможные значения для этой клетки. Сначала забиваются исходные данные, затем анализируется каждая клетка и в массив заносятся все возможные значения. Если количество возможных значений равно одному, данная клетка помечается как решённая и алгоритм начинает выполняться заново. Таким образом можно решить простые судоку.
__________________
Герман - это не имя, это особое состояние души (Джим Анджер) |
|
|
Ответить |
"+" от:
|
Реклама и уведомления | |
03.02.2011 17:28 | #29 | |
|
Цитата:
Если Вы решали Судоку, то первые циферки находятся исходя из того, что в каждой строке, столбце и соотв. клетке 3×3 ровно по одной цифре из набора 1..9. Т.е. сначала, например, рассматриваются все единицы. Вычеркиваются все стобцы, строки, квадраты 3 × 3 в которых есть единицы, если вдруг в некотором квадрате, строке или столбце окажется, что вычернуты все неразрешенные клетки кроме одной, то в ней гарантированно - единица. Например в примере сверху в двух последних строках есть пятерки. Вычеркиваем эти строки и замечаем, что в 7-й строке в третьей позиции должна быть пятерка.
__________________
Тот факт, что медуза выжила 650 миллионов лет без мозгов, даёт надежду многим. |
|
|
Ответить |
03.02.2011 19:08 | #30 |
Сообщений: 10,921
+ 3,666
10,931/4,676
– 584
286/214
|
Давно я не брал в руки шашки!
Спустя 15 лет обсуждение судоку сподвигло меня написать программу На старом добром любимом QBasic (только его я и помнил, оказывается, так что извините) Программа решает уровни сложности Easy, Medium, Hard с сайта http://websudoku.com С уровнем "Evil" (там на каком-то этапе нужно делать перебор вариантов) не справляется. Кстати, Надир, в вашем примере через несколько ходов тоже не остается очевидных вариантов, надо перебирать. |
|
Ответить |
"+" от:
|
|