用python设计数独的心得体会_python实现数独算法实例
本文实例讲述了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实现数独算法实例相关推荐
- python高阶函数心得体会_Python高阶函数使用总结
Datawhale干货 作者:皮钱超,厦门大学,Datawhale原创作者 本文约2000字,建议阅读6分钟 审稿人:耿远昊,Datawhale成员,华东师范大学,开源教程<Joyful-P ...
- python搭建环境的心得体会_python学习第一天_环境的搭建
Python linux环境的安装: ,这里我下载的2.6.6版本: 2.在Centos系统中安装python之前,希望大家检查当前系统是否已经安装了python以及版本信息(最好先卸载,再安装): ...
- python上机实验报告心得体会_Python开发实习心得~
不知不觉实习了半个月了,记录一下半个月的都具体干了些什么..这是一个超链接-Git为分布式版本控制系统,Git只有在pull,push时需要联网,而commit并不需要联网.一个class继承了uni ...
- c语言项目研发实训设计,关于软件设计实训心得体会(通用5篇)
关于软件设计实训心得体会(通用5篇) 当我们经过反思,对生活有了新的看法时,往往会写一篇心得体会,这样能够让人头脑更加清醒,目标更加明确.那么好的心得体会都具备一些什么特点呢?以下是小编精心整理的关于 ...
- 包装实训总结报告_包装设计实训心得体会
包装设计实训心得体会 包装设计实训心得体会 当我们受到启发,对学习和工作生活有了新的看法时,不妨将其写成一篇心 得体会, 让自己铭记于心, 它可以帮助我们了解自己的这段时间的学习. 工作生 活状态. ...
- python读书心得体会_Python学习心得体会
首先最开始,我们要明确一点,学习编程不是一日之功,需要每天投入时间学习,也不可纸上谈兵,需要自己亲自操作,不动手就不会发现问题,动了手印象才会深刻,记得更靠. 接下来我就稍微总结一下,我在学习中遇到的 ...
- python实训报告心得体会-Python学习心得体会
首先最开始,我们要明确一点,学习编程不是一日之功,需要每天投入时间学习,也不可纸上谈兵,需要自己亲自操作,不动手就不会发现问题,动了手印象才会深刻,记得更靠. 接下来我就稍微总结一下,我在学习中遇到的 ...
- 多媒体制作技术心得体会_多媒体演示文稿的设计与制作学习心得体会
多媒体演示文稿的设计与制作 学习心得体会 张 赟 通过这次培训学习,使我进一步地掌握了制作和应用ppt等网络教学的知识和技能,增长了见识,理论水平.操作水平也有所提高.基本上掌握多媒体教学演示文稿的制 ...
- python语言的实验心得体会范文_实验报告个人心得体会范文
实验报告个人心得体会范文 实验后的实验报告让我们有了总结回顾的效果.下面是 xx 整理的实验报告心得体会范文,以供大家阅读. 实验报告心得体会范文 ( 一 ) 这学期我们开设了计 算机网络技术实验课. ...
最新文章
- [Eclipse] - Eclipse空格替换tab
- DCMTK:全局类型和常量定义
- [css] 你有用过clip-path吗?说说你对它的理解和它都有哪些运用场景?
- ubuntu手动修改anaconda环境变量
- 背景透明,文字不透明效果
- .net系统自学笔记——数组
- VS2008下, Microsoft AJAX 组件开发单独js智能提示
- 2018年计算机考试玉林地点,广西壮族自治区玉林市2021上半年计算机等级考试时间...
- pl/mysql安装_MySQL安装
- Android AP模式下获取SSID/PASSWORD
- 2021-06-18 链接标签
- 树莓派配置文档config.txt说明
- Unity代码分享——一个快速显示所有Sprite为Image_icon的帮助类
- R语言学习2.1.数值型与字符型
- 梦幻西游网络诊断找不到服务器,《梦幻西游》电脑版出现网络故障 受影响者可寻找恢复使者进行恢复...
- 1044 火星数字 ——c实现
- .NET Core----Docker The type initializer for 'Gdip' threw an exception异常
- freeswitch 对接IMS 多网口方案
- 一篇搞懂Java多线程运行机制
- 技术派-程序员常见基础面试题