這個問題的關鍵是要創造最短的不要太慢數獨求解器。這被定義爲:當板上有斑點時,不能遞歸,只能有一個數字。智能數獨高爾夫
這裏是最短的我到目前爲止在python:
r=range(81)
s=range(1,10)
def R(A):
bzt={}
for i in r:
if A[i]!=0: continue;
h={}
for j in r:
h[A[j]if(j/9==i/9 or j%9==i%9 or(j/27==i/27)and((j%9/3)==(i%9/3)))else 0]=1
bzt[9-len(h)]=h,i
for l,(h,i)in sorted(bzt.items(),key=lambda x:x[0]):
for j in s:
if j not in h:
A[i]=j
if R(A):return 1
A[i]=0;return 0
print A;return 1
R(map(int, "080007095010020000309581000500000300400000006006000007000762409000050020820400060"))
最後一行我認爲是CMD線輸入的一部分,它可以被更改爲:
import sys; R(map(int, sys.argv[1]);
這與其他數獨高爾夫挑戰類似,只是我想消除不必要的遞歸。任何語言都可以接受。挑戰在於!
不錯它肯定從我的版本修剪下來 - 不想到了這些微選擇技巧。現在我已經創建了一個更大的版本,可以更有效地工作,並獲得數獨的所有解決方案,但這正在改變問題規範。 – Claudiu 2008-10-19 23:47:53