加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

深度搜索解数独

发布时间:2020-12-17 17:27:10 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 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 an

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

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

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读