Алгоритм составления таблицы "судоку"

Vin-Diesel

Новичок
Алгоритм составления таблицы "судоку"

Судоку представляет собой квадрат 9 на 9 клеток. Эти клетки сгруппированы в 9 квадратов поменьше, 3 на 3 клетки каждый.
Необходимо разместить цифры от 1 до 9 во всех клетках таким образом, чтобы в каждой строке, в каждом столбце и в каждом маленьком квадрате цифры встречались ровно один раз.

Известно, что цифр всего 81, от 1 до 9, каждая встречается 9 раз.
Можно сгенерировать массив такого вида, и работать с ним:
PHP:
$array[$row][$col]=$number;
На этом - ступор.. Как их правильно разместить? Проверять функцией нет ли в ряду, столбце, квадрате одинаковых чисел, если же есть менять их местами, и так пока не будет готова таблица?
 

StUV

Rotaredom
Известно, что цифр всего 81
у меня ступор уже вот на этом =)))

-~{}~ 12.10.07 16:45:

можно подробнее - что считать строкой/столбцом ?..

-~{}~ 12.10.07 16:45:

зы: и что цифрой ;)

-~{}~ 12.10.07 16:54:

1. можно описать логические конструкции пересечения возможностей расстановки цифр для каждого типа объекта с меж-типовыми проверками доступности таких цифр и выставлять на доску по одной проверяя при каждом шаге выполнение требований задачи
2. можно составить массив матриц всех возможных перестановок 81 цифры на такой доске и пробежать по нему проверяя "методом тыка"

1 - алгоритм, 2 - решение "в лоб" ;)

-~{}~ 12.10.07 16:57:

зы:
в первом примере при отсутствии возможности выставления цифры для данного типа объекта откатываться назад и выставлять на предыдущем шаге другую цифру
рекурсивный должен быть простым и коротким
 

StUV

Rotaredom
ззы:
кстати первый алгоритм достаточно быстр и вроде бы должен работать без возвратов
построй первые три строки - после этого видно какие столбцы по три цифры куда нужно ставить
+ указаный алгоритм это вполне сделает сам =)
 

Vin-Diesel

Новичок
Написал такое:
http://phpclub.ru/paste/1899
Нужно переделать в класс, и добавить откат на шаг назад, а то пустые клетки остаются(нолики).
Хотя у меня ровно один раз составил полную таблицу, случайно:)

-~{}~ 14.10.07 20:55:

Блин, целый день мучался.. ничего не вышло, на бумажке вроде получается. Но в коде..

-~{}~ 14.10.07 21:10:

http://blog.forret.com/2006/08/a-sudoku-challenge-generator/
Одно из решений
 
Сверху