【问题标题】:Z3 Sudoku SolverZ3 数独解算器
【发布时间】:2014-05-04 00:47:15
【问题描述】:

几周前我在rise4fun 网站上,他们有一个python 代码可以将数独拼图输入文件转换为z3。我今天再次检查,文件不见了,想知道是否有人有这个代码或者可以向我解释如何实现它。谢谢!!

【问题讨论】:

    标签: z3 sudoku smt


    【解决方案1】:
        # 9x9 matrix of integer variables
    X = [ [ Int("x_%s_%s" % (i+1, j+1)) for j in range(9) ] 
          for i in range(9) ]
    
    # each cell contains a value in {1, ..., 9}
    cells_c  = [ And(1 <= X[i][j], X[i][j] <= 9) 
                 for i in range(9) for j in range(9) ]
    
    # each row contains a digit at most once
    rows_c   = [ Distinct(X[i]) for i in range(9) ]
    
    # each column contains a digit at most once
    cols_c   = [ Distinct([ X[i][j] for i in range(9) ]) 
                 for j in range(9) ]
    
    # each 3x3 square contains a digit at most once
    sq_c     = [ Distinct([ X[3*i0 + i][3*j0 + j] 
                            for i in range(3) for j in range(3) ]) 
                 for i0 in range(3) for j0 in range(3) ]
    
    sudoku_c = cells_c + rows_c + cols_c + sq_c
    
    # sudoku instance, we use '0' for empty cells
    instance = ((5,3,0,0,7,0,0,0,0),
                (6,0,0,1,9,5,0,0,0),
                (0,9,8,0,0,0,0,6,0),
                (8,0,0,0,6,0,0,0,3),
                (4,0,0,8,0,3,0,0,1),
                (7,0,0,0,2,0,0,0,6),
                (0,6,0,0,0,0,2,8,0),
                (0,0,0,4,1,9,0,0,5),
                (0,0,0,0,8,0,0,7,9))
    
    instance_c = [ If(instance[i][j] == 0, 
                      True, 
                      X[i][j] == instance[i][j]) 
                   for i in range(9) for j in range(9) ]
    
    s = Solver()
    s.add(sudoku_c + instance_c)
    if s.check() == sat:
        m = s.model()
        r = [ [ m.evaluate(X[i][j]) for j in range(9) ] 
              for i in range(9) ]
        print_matrix(r)
    else:
        print "failed to solve"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      • 2013-02-21
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      相关资源
      最近更新 更多