• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

python 实现 数独算法

python 水墨上仙 1948次浏览

python 实现 数独算法

# -*- coding: utf-8 -*-
'''
Created on 2012-10-5
@author: Administrator
'''
from collections import defaultdict
import itertools
a = [
        [ 0, 7, 0, 0, 0, 0, 0, 0, 0], #0
        [ 5, 0, 3, 0, 0, 6, 0, 0, 0], #1
        [ 0, 6, 2, 0, 8, 0, 7, 0, 0], #2
        #
        [ 0, 0, 0, 3, 0, 2, 0, 5, 0], #3
        [ 0, 0, 4, 0, 1, 0, 3, 0, 0], #4
        [ 0, 2, 0, 9, 0, 5, 0, 0, 0], #5
        #
        [ 0, 0, 1, 0, 3, 0, 5, 9, 0], #6
        [ 0, 0, 0, 4, 0, 0, 6, 0, 3], #7
        [ 0, 0, 0, 0, 0, 0, 0, 2, 0], #8
#        0, 1, 2, 3,|4, 5, 6,|7, 8
     ]
#a = [
#        [0, 0, 0, 0, 0, 0, 0, 0, 0], #0
#        [0, 0, 0, 0, 0, 0, 0, 0, 0], #1
#        [0, 0, 0, 0, 0, 0, 0, 0, 0], #2
#        #
#        [0, 0, 0, 0, 0, 0, 0, 0, 0], #3
#        [0, 0, 0, 0, 0, 0, 0, 0, 0], #4
#        [0, 0, 0, 0, 0, 0, 0, 0, 0], #5
#        #
#        [0, 0, 0, 0, 0, 0, 0, 0, 0], #6
#        [0, 0, 0, 0, 0, 0, 0, 0, 0], #7
#        [0, 0, 0, 0, 0, 0, 0, 0, 0], #8
##        0, 1, 2, 3,|4, 5, 6,|7, 8
#     ]
exists_d = dict((((h_idx, y_idx), v) for h_idx, y in enumerate(a) for y_idx , v in enumerate(y)  if v))
h_exist = defaultdict(dict)
v_exist = defaultdict(dict)
for k, v in exists_d.items():
    h_exist[k[ 0]][k[ 1]] = v
    v_exist[k[ 1]][k[ 0]] = v
aa = list(itertools.permutations(range(1, 10), 9))
h_d = {}
for hk, hv in h_exist.items():
   
    x = filter(lambda x:all((x[k] == v for k, v in hv.items())), aa)
    x = filter(lambda x:all((x[vk] != v for vk , vv in v_exist.items() for k, v in vv.items() if k != hk)), x)
#    print x
    h_d[hk] = x
def test(x, y):
    return all([y[i] not in [x_[i] for x_ in x] for i in range(len(y)) ])
def test2(x):
    return len(set(x)) != 9
s = set(range(9))
sudokus = []
for l0 in h_d[0 ]:
    
    for l1 in h_d[ 1]:
        if not test((l0,), l1):
            continue
        for l2 in h_d[ 2]:
            if not test((l0, l1), l2):
                continue
           # 1,2,3行 进行验证
            if test2([l0[ 0], l0[ 1], l0[ 2]
                        , l1[ 0], l1[ 1], l1[ 2]
                        , l2[ 0], l2[ 1], l2[ 2]
                       ])  : continue          
            if test2([l0[ 3], l0[ 4], l0[ 5]
                        , l1[ 3], l1[ 4], l1[ 5]
                        , l2[ 3], l2[ 4], l2[ 5]
                       ])  : continue          
            if test2([l0[ 6], l0[ 7], l0[ 8]
                        , l1[ 6], l1[ 7], l1[ 8]
                        , l2[ 6], l2[ 7], l2[ 8]
                       ])  : continue          
           
            for l3 in h_d[ 3]:
                if not test((l0, l1, l2), l3):
                    continue
               
                for l4 in h_d[ 4]:
                    if not test((l0, l1, l2, l3), l4):
                        continue
                   
                    for l5 in h_d[ 5]:
                        if not test((l0, l1, l2, l3, l4), l5):
                            continue
                       # 4,5,6行 进行验证
                        if test2([l3[ 0], l3[ 1], l3[ 2]
                                    , l4[ 0], l4[ 1], l4[ 2]
                                    , l5[ 0], l5[ 1], l5[ 2]
                                   ])  : continue          
           
                        if test2([l3[ 3], l3[ 4], l3[ 5]
                                    , l4[ 3], l4[ 4], l4[ 5]
                                    , l5[ 3], l5[ 4], l5[ 5]
                                   ])  : continue          
           
                        if test2([l3[ 6], l3[ 7], l3[ 8]
                                    , l4[ 6], l4[ 7], l4[ 8]
                                    , l5[ 6], l5[ 7], l5[ 8]
                                   ])  : continue          
                       
                        for l6 in h_d[ 6]:
                            if not test((l0, l1, l2, l3, l4, l5,), l6):
                                continue
                            for l7 in h_d[ 7]:
                                if not test((l0, l1, l2, l3, l4, l5, l6), l7):
                                    continue
                                for l8 in h_d[ 8]:
                                    if not test((l0, l1, l2, l3, l4, l5, l6, l7), l8):
                                        continue
                                   # 7,8,9行 进行验证
                                    if test2([l6[ 0], l6[ 1], l6[ 2]
                                                , l7[0 ], l7[1 ], l7[2 ]
                                                , l8[0 ], l8[1 ], l8[2 ]
                                               ])  : continue           
                       
                                    if test2([l6[ 3], l6[ 4], l6[ 5]
                                                , l7[3 ], l7[4 ], l7[5 ]
                                                , l8[3 ], l8[4 ], l8[5 ]
                                               ])  : continue           
                       
                                    if test2([l6[ 6], l6[ 7], l6[ 8]
                                                , l7[6 ], l7[7 ], l7[8 ]
                                                , l8[6 ], l8[7 ], l8[8 ]
                                               ])  : continue           
                                   
                                    print l0
                                    print l1
                                    print l2
                                    print l3
                                    print l4
                                    print l5
                                    print l6
                                    print l7
                                    print l8
                                   
                                    sudokus.append((l0, l1, l2, l3, l4, l5, l6, l7, l8))
                                   
                                   
   
   
    


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明python 实现 数独算法
喜欢 (0)
加载中……