国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python實現數獨算法實例

2020-02-23 01:34:00
字體:
來源:轉載
供稿:網友

本文實例講述了python實現數獨算法的方法。分享給大家供大家參考。具體如下:

# -*- coding: utf-8 -*-'''Created on 2012-10-5@author: Administrator'''from collections import defaultdictimport itertoolsa = [  [ 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]] = vaa = 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] = xdef 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)) != 9s = 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))            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天津市| 安康市| 平陆县| 沙河市| 怀柔区| 泾川县| 林甸县| 城固县| 双鸭山市| 晋州市| 崇左市| 错那县| 黄龙县| 麻江县| 江达县| 南康市| 富宁县| 石门县| 东台市| 米泉市| 宁波市| 仲巴县| 鄂尔多斯市| 邓州市| 清水河县| 湛江市| 灵山县| 钟山县| 定兴县| 宣武区| 瑞金市| 阿拉善左旗| 武邑县| 涟源市| 宁蒗| 鹤峰县| 福海县| 工布江达县| 赤城县| 垣曲县| 宜良县|