各位用户为了找寻关于python实现数独算法实例的资料费劲了很多周折。这里教程网为您整理了关于python实现数独算法实例的相关资料,仅供查阅,以下为您介绍关于python实现数独算法实例的详细内容

本文实例讲述了python实现数独算法的方法。分享给大家供大家参考。具体如下:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 # -*- 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程序设计有所帮助。