2015-05-07 3 views
-1

Здесь sudoku каждый X - это коробка в сумоку 6x6, которую мы даем тем, которые я пытаюсь установить в начале. Думал, что эта стратегия будет работать, но я не думаю: I «Задайте известные значения X, а затем сгенерируйте необходимые перестановки и протестируйте их на соответствие ограничениям проблем». нужна помощь! Я не знаю, почему это не сработает! Heres обновленная версия, по-прежнему не отвечающая истина или ложь от пролога. Просто прошу прочь, не сказав мне, что такое решение для судоку. Он также использует 98% моего процессора, пока он не отвечает, так что продолжайте рисовать. Может кто-нибудь мне помочь?Prolog Sudoku с перестановкой

sudoku(X1,X2,X3,X4,X5,X6,X7,X8, 
X9,X10,X11,X12,X13,X14,X15,X16,X17, 
X18,X19,X20,X21,X22,X23,X24,X25,X26, 
X27,X28,X28,X30,X31,X32,X33,X34,X35,X36):- 

X2=4, 
X4=2, 
X7=3, 
X9=1, 
X13=6, 
X24=6, 
X30=2, 
X33=3, 
X34=6, 
X35=1, 

permutation([X1,X3,X5,X6],[1,3,5,6]), 
permutation([X8,X10,X11,X12],[2,4,5,6]), 
permutation([X14,X15,X16,X17,X18],[1,2,3,4,5]), 
permutation([X19,X20,X21,X22,X23],[1,2,3,4,5]), 
permutation([X25,X26,X27,X28,X29],[1,3,4,5,6]), 
permutation([X31,X32,X36],[2,4,5]), 

permutation([X1,X19,X25,X31],[1,2,4,5]), 
permutation([X8,X14,X20,X26,X32],[1,2,3,5,6]), 
permutation([X3,X15,X21,X27],[2,4,5,6]), 
permutation([X10,X16,X22,X28],[1,3,4,5]), 
permutation([X5,X11,X17,X23,X29],[2,3,4,5,6]), 
permutation([X6,X12,X18,X36],[1,3,4,5]), 

permutation([X1,X3,X8],[2,5,6]), 
permutation([X5,X6,X10,X11,X12],[1,3,4,5,6]), 
permutation([X14,X15,X19,X20,X21],[1,2,3,4,5]), 
permutation([X16,X17,X18,X22,X23],[1,2,3,4,5]), 
permutation([X25,X26,X27,X31,X32],[1,2,4,5,6]), 
permutation([X28,X29,X36],[3,4,5]). 
+0

'перестановка ([X1, X3, X4, X5, X6], [1,3,5,6]),' никогда не сможет преуспеть. И что вы подразумеваете под '(: =)/2'? – false

+0

О, спасибо! Да, я решил, что мне нужно удалить X4, поскольку он уже определен внизу. каждый х представляет собой поле в судоку. не будет X2: = 4 установить x2 на 4, когда пользователь запрашивает как судоку (X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, Х19, Х20, Х21, Х22, Х23, Х24, Х25, X26, X27, X28, X29, X30, X31, X32, X33, X34, X35, X36). теперь он не возвращает ложь, а просто ничего не возвращает. Я хочу, чтобы он возвращал значения для других полей, которые еще не определены. и что вы имеете в виду (: =)/2, где я написал это @false? –

+0

Он ничего не возвращает, значит, он обрабатывает минуты? Использование моего процессора говорит, что он использует 99% CPU LOL. –

ответ

-1

Так что я понял. Проблема заключалась в том, что для ПК было просто слишком большой задачей, используя чисто перестановки (хотя это и требовало назначения). Решение состоит в том, чтобы переупорядочить перестановки более желательным образом. Поскольку он выше, он вычисляет строки, столбцы, а затем поля, то есть экспоненциально лучше смешивать их для выполнения задачи с большей легкостью. как таковой:

sudoku(X1,X2,X3,X4,X5,X6,X7,X8, 
X9,X10,X11,X12,X13,X14,X15,X16,X17, 
X18,X19,X20,X21,X22,X23,X24,X25,X26, 
X27,X28,X28,X30,X31,X32,X33,X34,X35,X36):- 

X2=4, 
X4=2, 
X7=3, 
X9=1, 
X13=6, 
X24=6, 
X30=2, 
X33=3, 
X34=6, 
X35=1, 
%row 
permutation([X1,X3,X5,X6],[1,3,5,6]), 
permutation([X8,X10,X11,X12],[2,4,5,6]), 
%column 
permutation([X1,X19,X25,X31],[1,2,4,5]), 
permutation([X8,X14,X20,X26,X32],[1,2,3,5,6]), 
%box 
permutation([X1,X3,X8],[2,5,6]), 
permutation([X5,X6,X10,X11,X12],[1,3,4,5,6]), 
%row 
permutation([X14,X15,X16,X17,X18],[1,2,3,4,5]), 
permutation([X19,X20,X21,X22,X23],[1,2,3,4,5]), 
%column 
permutation([X3,X15,X21,X27],[2,4,5,6]), 
permutation([X10,X16,X22,X28],[1,3,4,5]), 
%box 
permutation([X25,X26,X27,X28,X29],[1,3,4,5,6]), 
permutation([X31,X32,X36],[2,4,5]), 
%row 
permutation([X14,X15,X19,X20,X21],[1,2,3,4,5]), 
permutation([X16,X17,X18,X22,X23],[1,2,3,4,5]), 
%column 
permutation([X5,X11,X17,X23,X29],[2,3,4,5,6]), 
permutation([X6,X12,X18,X36],[1,3,4,5]), 
%box 
permutation([X25,X26,X27,X31,X32],[1,2,4,5,6]), 
permutation([X28,X29,X36],[3,4,5]). 

Результат немного странный, но правильный. Снова Stackoverflow терпит неудачу, и я должен ответить на собственный вопрос. Спасибо за нисходящее вы гении.

Смежные вопросы