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

# -*- coding: utf-8 -*-

'''

Created on 2012-10-5

@author: Administrator

'''

from collections import defaultdict

import itertools

a = [

[ 0,7,0],#0

[ 5,3,6,#1

[ 0,2,8,#2

#

[ 0,5,#3

[ 0,4,1,#4

[ 0,9,#5

#

[ 0,#6

[ 0,3],#7

[ 0,#8

# 0,|4,|7,8

]

#a = [

# [0,#0

# [0,#1

# [0,#2

# #

# [0,#3

# [0,#4

# [0,#5

# #

# [0,#6

# [0,#7

# [0,#8

## 0,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,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,l2,l3),l4):

continue

for l5 in h_d[ 5]:

if not test((l0,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,l4,l5,l6):

continue

for l7 in h_d[ 7]:

if not test((l0,l6),l7):

continue

for l8 in h_d[ 8]:

if not test((l0,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,l7,l8))

希望本文所述对大家的Python程序设计有所帮助。

用python设计数独的心得体会_python实现数独算法实例相关推荐

  1. python高阶函数心得体会_Python高阶函数使用总结

    Datawhale干货   作者:皮钱超,厦门大学,Datawhale原创作者 本文约2000字,建议阅读6分钟 审稿人:耿远昊,Datawhale成员,华东师范大学,开源教程<Joyful-P ...

  2. python搭建环境的心得体会_python学习第一天_环境的搭建

    Python linux环境的安装: ,这里我下载的2.6.6版本: 2.在Centos系统中安装python之前,希望大家检查当前系统是否已经安装了python以及版本信息(最好先卸载,再安装): ...

  3. python上机实验报告心得体会_Python开发实习心得~

    不知不觉实习了半个月了,记录一下半个月的都具体干了些什么..这是一个超链接-Git为分布式版本控制系统,Git只有在pull,push时需要联网,而commit并不需要联网.一个class继承了uni ...

  4. c语言项目研发实训设计,关于软件设计实训心得体会(通用5篇)

    关于软件设计实训心得体会(通用5篇) 当我们经过反思,对生活有了新的看法时,往往会写一篇心得体会,这样能够让人头脑更加清醒,目标更加明确.那么好的心得体会都具备一些什么特点呢?以下是小编精心整理的关于 ...

  5. 包装实训总结报告_包装设计实训心得体会

    包装设计实训心得体会 包装设计实训心得体会 当我们受到启发,对学习和工作生活有了新的看法时,不妨将其写成一篇心 得体会, 让自己铭记于心, 它可以帮助我们了解自己的这段时间的学习. 工作生 活状态. ...

  6. python读书心得体会_Python学习心得体会

    首先最开始,我们要明确一点,学习编程不是一日之功,需要每天投入时间学习,也不可纸上谈兵,需要自己亲自操作,不动手就不会发现问题,动了手印象才会深刻,记得更靠. 接下来我就稍微总结一下,我在学习中遇到的 ...

  7. python实训报告心得体会-Python学习心得体会

    首先最开始,我们要明确一点,学习编程不是一日之功,需要每天投入时间学习,也不可纸上谈兵,需要自己亲自操作,不动手就不会发现问题,动了手印象才会深刻,记得更靠. 接下来我就稍微总结一下,我在学习中遇到的 ...

  8. 多媒体制作技术心得体会_多媒体演示文稿的设计与制作学习心得体会

    多媒体演示文稿的设计与制作 学习心得体会 张 赟 通过这次培训学习,使我进一步地掌握了制作和应用ppt等网络教学的知识和技能,增长了见识,理论水平.操作水平也有所提高.基本上掌握多媒体教学演示文稿的制 ...

  9. python语言的实验心得体会范文_实验报告个人心得体会范文

    实验报告个人心得体会范文 实验后的实验报告让我们有了总结回顾的效果.下面是 xx 整理的实验报告心得体会范文,以供大家阅读. 实验报告心得体会范文 ( 一 ) 这学期我们开设了计 算机网络技术实验课. ...

最新文章

  1. [Eclipse] - Eclipse空格替换tab
  2. DCMTK:全局类型和常量定义
  3. [css] 你有用过clip-path吗?说说你对它的理解和它都有哪些运用场景?
  4. ubuntu手动修改anaconda环境变量
  5. 背景透明,文字不透明效果
  6. .net系统自学笔记——数组
  7. VS2008下, Microsoft AJAX 组件开发单独js智能提示
  8. 2018年计算机考试玉林地点,广西壮族自治区玉林市2021上半年计算机等级考试时间...
  9. pl/mysql安装_MySQL安装
  10. Android AP模式下获取SSID/PASSWORD
  11. 2021-06-18 链接标签
  12. 树莓派配置文档config.txt说明
  13. Unity代码分享——一个快速显示所有Sprite为Image_icon的帮助类
  14. R语言学习2.1.数值型与字符型
  15. 梦幻西游网络诊断找不到服务器,《梦幻西游》电脑版出现网络故障 受影响者可寻找恢复使者进行恢复...
  16. 1044 火星数字 ——c实现
  17. .NET Core----Docker The type initializer for 'Gdip' threw an exception异常
  18. freeswitch 对接IMS 多网口方案
  19. 一篇搞懂Java多线程运行机制
  20. 技术派-程序员常见基础面试题

热门文章

  1. nginx启动与停止
  2. Java并发编程之显式锁(Lock)使用
  3. 项目管理十大知识领域,为何不含
  4. 服务器centos怎么部署_我什么都不会,怎么拥有自己的个人博客呢
  5. 2014年9月计算机二级mysql真题_2017年9月全国计算机二级MySQL考试章节练习题
  6. linux进程q是什么意思,Linux进程
  7. c mysql使用场景_Mysql 场景
  8. dir函数_PHP dir()函数与示例
  9. 术中导航_密码术中的计数器(CTR)模式
  10. SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了!