深度搜索解数独
发布时间:2020-05-24 23:32:01 所属栏目:Python 来源:互联网
导读:深度搜索解数独
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 def guess(ku,i,v,b = 1):
affects = []
for j in range(b,81):
if (i / 9 == j / 9
or i % 9 == j % 9
or (i / 9 / 3 * 3 == j / 9 / 3 * 3
and i % 9 / 3 * 3 == j % 9 / 3 * 3))
and v in ku[j]:
ku[j].remove(v)
affects.append(j)
ku[i].clear()
ku[i].add(v)
return affects
def bfs(ku,i):
clone = ku[i].copy()
for v in clone:
affects = guess(ku,i + 1)
if all([len(c) == 1 for c in ku]) or all(ku) and i < 81 and bfs(ku,i + 1):
return True
else:
for j in affects:
ku[j].add(v)
ku[i] = clone
ku = [set(range(1,10)) for i in range(81)]
s = '040300000010608000050000007065910872090070003002084601906735018503400029174890365'
for i in range(81):
v = int(s[i])
if 1 <= v <= 9:
guess(ku,v)
for i in range(81):
if len(ku[i]) > 1:
bfs(ku,i)
break
print ''.join(str(next(iter(c)) if len(c) == 1 else 0) for c in ku)
# => 249357186317628954658149237465913872891276543732584691926735418583461729174892365
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
