用C语言如何随机生成一个数独?

求思路。。... 求思路。。 展开
 我来答
九黎侍者
2012-11-07
知道答主
回答量:21
采纳率:100%
帮助的人:11.1万
展开全部

数独生成算法?这个还真不好搞,不过我当初写数独游戏的时候随便捣鼓出来过一个,你自己去改改吧,至于这个算法能不能生成所有的数独,我还真没论证过。

 

原理:对一个给出的数独棋盘的所有行或列交换给出的两个数X、Y,数组仍满足数独规则。如给出1、2,则对所有列交换1、2的位置,数组仍满足数独规则。

 

 

由于对棋盘的演进是随机的,所以相当于随机生成数独棋盘啦。每次演进的次数最好大一点,10次以上吧,以保证每个数都被换过位置。

 

具体代码就不用我写了吧,嘎嘎……

追问
不用生成所有数独。。只要生成一个唯一解的就好。。。
如果按照您这个算法,交换所有列任意两个数或者多组数就可以生成新的数独了吧。
追答
唯不唯一解是挖坑的事情,就是把某个格子不显示出来,挖得好就是唯一解,挖不好就不是了。而我这个是生成一个终盘的。

按照算法,生成的是新的数独数组。每次交换必须是要么所有行,要么所有列,不能只交换一行或者一列,否则就不满足数独规则了。至于交换多少次,你想演进到什么程度就交换多少次,不过物极必反,也许演进太多会回到原点哦。所以交换50次左右吧。

唯一解的事情,好像有人论证过少于多少个坑就一定是唯一解,这个你慢慢看去吧,嘎嘎……
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式