您现在的位置: >
数独是一款有趣又益智的游戏,人脑总是没有程序快,那来就来看看Python方法如何快速解决数独游戏的吧。
#! /usr/bin/env python
# -*- coding: utf-8 -*-
'''
'''
#import sys,os
def scan(temp,i):
heng=temp[(i/9*9):(i/9*9+9)]
for i0 in range(0,73,9):
shu.append(temp[i%9+i0])
row=i%9/3*3
line=i/27*3
for i0 in range(0,3):
kuai.append(temp[line*9+row+i0])
kuai.append(temp[(line+1)*9+row+i0])
kuai.append(temp[(line+2)*9+row+i0])
hsk=heng+shu+kuai
hsk=list(set(hsk))
data=[0,1,2,3,4,5,6,7,8,9]
map(data.remove,hsk)
return data
def myprint(temp):
if not temp:
print 'None'
for i in range(0,73,9):
print temp[i:i+9]
def easysolve(test): print 'try easy way...' changeflag=1 while changeflag: changeflag=0 for i in range(0,81): if not test[i]: numleft=scan(test,i) if not numleft: return 0 elif len(numleft)==1: test[i]=numleft[0] changeflag=1 myprint(test) return test def hardsolve(test): print 'try hard way...' i=0 while i&81 and test[i]!=0: i=i+1 if test[i]==0: numleft=scan(test,i) print i+1,':',numleft if not numleft: return 0 elif len(numleft)==1: test[i]=numleft[0] temp=mysolve(test) if not temp: return 0 else: test=temp else: for num in numleft: temp=test[:] temp[i]=num temp=mysolve(temp) if not temp: continue return test def mysolve(test): global result try: except: result=[] test=easysolve(test) if not test: print 'wrong' return 0 elif min(test)!=0: result.append(test) return test else: test=hardsolve(test) return test def shudu(test): global result result=[] mysolve(test) return result result=[] test=[\ 0,2,8,0,1,4,0,0,0,\ 0,0,7,0,8,5,0,0,6,\ 1,0,0,7,0,0,0,0,0,\ 0,0,9,8,0,0,0,4,5,\ 0,0,3,5,0,1,9,0,0,\ 5,8,0,0,0,9,1,0,0,\ 0,0,0,0,0,8,0,0,4,\ 9,0,0,3,5,0,8,0,0,\ 0,0,0,4,9,0,5,3,0] temp=shudu(test) print 'Done\n' if temp: i=1 for one in temp: print 'result:',i i=i+1 myprint(one)
玩蛇网原创,转载请注明文章出处和来源网址:
微信公众号搜索"玩蛇网Python之家"加关注,每日最新的Python资讯、图文视频教程可以让你一手全掌握。强烈推荐关注!
【微信扫描下图可直接关注】
玩蛇网Python新手QQ群,欢迎加入: ①
文章发布日期: 15:18
我要分享到:
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
相关文章推荐
别人正在看
Python学习与资源分享平台数独比较简单的解题方法一 | 死理性派小组 | 果壳网 科技有意思
853685人加入此小组
单区唯一解法 原理单区唯一解法,顾名思义“单区”指的是一行、一列或者一宫,“唯一解”指的是某格内只有唯一一个解。由于数独规则的要求,数独中每行、列及宫内数字都为1-9。所以如果一行、列或宫中出现了8个不同的数字,那么直接可以填出余下的那个没有出现的数字。 技巧说明该技巧可以说是数独中最简单直观的方法了。只要知道数独的规则,就算是第一次接触数独的人也能理解应用该技巧。但这个技巧却也是数独重要的基本功之一,因为这个技巧可以说所有数独到最后收官阶段都会被多次应用,所以使用该技巧所用的时间就会影响你整体速度。如果你想练习快速地解答数独,熟练且准确地使用该技巧是必须做到的。一般熟练的玩家会在1-2秒内准确地找到行、列、宫中缺少的那一个数字。不过开始接触数独的朋友还应该循序渐进地练习,不要上来就为了节省时间而导致马虎出错。经常有在比赛时候为了提高速度,而根据感觉随意填了一个数字,而导致出现低级错误的情况。
+ 加入我的果篮
没办法贴图,光说是有点傻,但是做题的时候就明白了
就想知道当某格出现2选1状况时该怎么办
继续找其他条件,数独一般都是唯一解,出现双解的情况很少,一般是程序出题,程序有漏洞造成的。
………………我做数独大多时候都是硬做,找唯一解是必然的啊,难道还有别的做法?
方法有很多,网上都会有介绍,可以上网搜一搜,技巧的运用熟练是需要海量做题的,呵呵
回复被删了……?
应用数学专业
practice makes perfect!我爸爸玩了两个月,现在可以3min解决专家级了……
引用 飞鸟未来 的回应:practice makes perfect!我爸爸玩了两个月,现在可以3min解决专家级了……高手呀
那啥你可以下一个数独博士,里面有一种模式是纯粹的排除法,表示用那种模式只要不是双解,基本上都简单的不想做。
我的经验是,数独要善用铅笔,标记的技巧也很重要
引用 飞鸟未来 的回应:practice makes perfect!我爸爸玩了两个月,现在可以3min解决专家级了……- -!!!我觉得如果用编程,递归试数应该可以。
还有一个方法是先得出全部的一个数,比如出现7最多,就先把7全部弄出来
(C)2016果壳网&&&&京ICP证100430号&&&&京网文[-239号&&&&新出发京零字东150005号时尚 FASHION
享乐 PLEASURE
体验 EXPERIENCE
您的当前位置: >
数独怎么玩比较快图解 数独玩法技巧及视频教程解析
文章来源:点米综合 发布时间: 10:19 编辑:dianmi005
数独怎么玩比较快图解 数独玩法技巧及视频教程解析
数独又称之为九宫格,起源于18世纪的瑞士。数独主要是让玩家们经过思考推理进行演算的逻辑游戏。那么数独应该怎么玩比较快呢?数独的玩法有什么简单的技巧吗?下面我们一起来看看吧!
数独的规则
在空格内填入数字1-9,使得每行、每列和每个宫内数字都不重复。
注意:数独题目满足条件的***是唯一的。
数独的元素
数独的元素主要包括行、列和宫。这三者划分出数独有三种不同形态的区域,而数独规则就是要求在这些区域内出现的数字都为1~9。
元素坐标图:
行:数独盘面内横向一组九格的区域,用字母表示其位置;
列:数独盘面内纵向一组九格的区域,用数字表示其位置;
宫:数独盘面内3&3格被粗线划分的区域,用中文数字表示其位置。
格的坐标:利用表示行位置的字母和表示列位置的数字定位数独盘面内每个格子的具体位置,如A3格,F8格等。
1. 宫内排除法
排除法就是利用数独中行、列和宫内不能填入相同数字的规则,利用已出现的数字对同行、同列和同宫内其他格进行排斥相同数字的方法。
宫内排除法就是将一个宫作为目标,用某个数字对它进行排除,最终得到这个宫内只有一格出现该数字的方法。技巧示意图:
如上图所示,A2、B4和F7三格内的1都对三宫进行排除,这时三宫内只有C9格可以填入1,本图例就是对三宫运用的排除法。
2. 行列排除法
行列排除法就是将一行或一列作为目标,用某个数字对它进行排除,最终得到这个行列内只有一格出现该数字的方法。技巧示意图:
如上图所示,D2和B8两格内的6都对F行进行排除,这时F行内只有F5格可以填入6,本图例就是对F行运用的排除法。
点米更了解时尚,内容覆盖时尚服装搭配、时尚数码、时尚生活、时尚妆容、奢华时尚,时尚女装,街拍美女图片,寻找时尚请上点米时尚网。Copyright &dedecms.
版权所有点米网() 备案号:蜀ICP备号 投稿/检举请联系:aiwen#dianmi.net(吧‘#’替换成‘@’)手把手教如果快速解数独及其理论依据
每个人刚上手做数独或者学数独的时候都习惯按照固定的数字顺序解题,比如从1到9或者从9到1,高级一点的时候会先找数字最多的,再找数字较多的,最后做数字最少的。但实际上后者也不是最快速的解题路径。如果研究高手解题视频,会发现他们的解题顺序看似是无序的,可能某个数字集中出,也可能某个宫集中出,或者在做排除法的时候又找到其他解法。但总之他们的解题过程通常是连贯顺畅一个接一个,不会被卡住进入长考时间。高手的解题顺序可能是:3、5、6、2、8、5、1、4、7、3、9.....那他们为什么在9个数字没有循环完一遍后就重复看之前看过的数字呢?他们是怎么做到在这个需要思维严密的游戏里又能思维如此发散的去处理各种问题呢?
首先为什么按照已知数给的多少来确定解题顺序也不是最快捷的呢?因为决定能否推导出剩下的数字不是由已知数多少唯一决定,而是取决于已知数数量和数字的布局,也就是说有的数字可能只给了一个,但是由于其他数字位置特殊而能把其他8个都找到;但如果形状不理想,某个数字就算给出了7个,剩下两个的位置也可能确定不了。
但是我们无法从题目形状上去判断应该从哪个数字优先入手,所以这就要看观察力和线索出数的连贯性了。也就是说每出一个数字,如何利用这个数字快速去找下一步或者判断换哪个数字继续观察。
首先我们考虑每新得出一个数字,对整个数独结构的影响来看,目前仅在初级解法体系下探讨,会有三个影响:
一、新出一个数字可以继续做这个数字的排除,观察和新出数字相关联的行、列、宫。
&在观察出第七宫的8之后,和它相关的四个宫还有两个宫没有8,所以分别观察得出四宫和八宫的8,然后第八宫可以继续向上得出第二宫的8,第四宫可以继续向右得出第六宫的8。
也就是说如果选择一个数字,应该把这个数字所有的宫内和行列排除观察完,观察的最优路径是沿着新出的继续找和它相关的。如果找不到确定数字能出区块也是好的。对高手来说,一个数字在9个宫内的位置排除大概在5秒内就完成了,对新人来说大概是40-60秒,这一个技术细节之间的进步空间就很大,你可以随便拿一道题检测一看完某一个数字在9宫里的位置能否确定的时间,也许你已经达到高手的速度,那差距就在下面两个方面了。
二、新出一个数字后由于占住了一个位置,导致行列宫的数字结构发生变化,所以其他数字可以直接排除出来。
根据第四宫8的区块和第一宫45数对,可以得到第一宫的8,然后下一步是因为第一宫有了8,所以第一宫能出9的区块在第一列,进而得到第四宫的9。
这就是高手发散的厉害了,大部分人做8的时候只能看所有的8,要等什么时候处理9的时候才能发现这个区块,但是高手的观察力已经很极致了,所以得到8后会马上发现一宫形状变化后能得到这个9的区块。那下一步再做8还是9呢,其实高手是根据新出的9继续找线索了,如果没有可能退回到上一步的8再观察。像这道题,如果是8第三宫的8也能出,如果是9用区块第七宫的9也能出。所以对高手来说条条都是大陆。或者也可以把高手的思路看做单一数字排除是主线,主线的每一步都可能找到分支,分支可以变成主线,也可以分支处理完继续回到主线。这就是高手做题虽然思路发散但是依然能做到逻辑严密。
三、新出一个数字导致它所在的行列宫的某个位置变成唯余。
这个时候第三宫可以排除出2,2出来以后第九宫3下面的格就变成唯余的4了。
这个应该是最难的,因为人脑不是电脑,所以当新出一个数后,是不可能马上检索所在的行、列和宫内其他数字的候选数的。所以绝大多数人会继续检索这个数字或者其他数字的排除,当排除实在出不来的时候再去找唯余,可这个时候已经不知道前面得到的哪个是关键的新数直接导致有唯余产生,因此大部分人需要重新按照唯余的思路再检索唯余,考虑某些关键的点。但是真正的高手是有可能直接新出数就看出来唯余的啊!就是这么牛啊!所以重新检索唯余和直接发现唯余在时间上的差距就巨大了。
所以解题线索的切换核心在于新出数字的三个作用,第一是该数字的排除、第二是其他数字因为形状变化了而出的排除、第三是该数字导致所在行列宫内某个地方出唯余了。理解这种本质并提高观察能力后,对我们来说哪个数字多就不重要了,通常情况下一上来看到哪个数字就出哪个,出来以后就沿着它继续传下去就好了。
如果你想练习怎么沿着线索继续解题,就需要从以上三个新出数字对题目产生的本质变化方面来考虑问题。但是如果思维不够严密,或者观察力不够高,建议还是先沿着固定套路解题,虽然慢但是能保证做出来。新手如果想一上来就学习高手的思路,那肯定会乱套的。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。