如何使用模拟退火算法MATLAB玩转数独魔方?

本文介绍了如何使用模拟退火算法在MATLAB中生成满足数独规则的九宫格矩阵。通过建立目标函数,确保每一行、每一列、每个宫格的数字和为45,并详细描述了新解的产生策略,即每次仅改变一行中的两个数字位置。虽然最终结果的各行各列和满足条件,但可能存在同一列中相同数字的问题,作者欢迎读者分享改进算法。

数独规则如下:

每一行、每一列、每一个粗线宫内的数字均含1-9,不重复。

影响数独难度的因素很多,包括最高难度的技巧、各种技巧所用次数、是否有隐藏及隐藏的深度及广度的技巧组合、当前盘面可逻辑推导出的出数个数等等。对于玩家而言,了解的技巧数量、熟练程度、观察力自然也影响对一道题的难度判断。市面上数独刊物良莠不齐,在书籍、报纸、杂志中所列的难度或者大众解题时间纯属参考,常有难度错置的情况出现,所以不必特别在意。网络上有很多数独难度的分析软件,比较著名的是 Nicolas Juillerat 开发的 Sudoku Explainer 和 Bernhard Hobiger 开发的 Hodoku,它们都是免费的软件。因为每种软件的都有不同的解题策略,所以也只能作为难度的大致界定,无法真正的解析出难度的内涵。

而笔者今天要讲的,是抛开题目,只根据规则,直接用MATLAB运行出一个数独九宫格魔方来。

01 问题的重述

假如有这样一个初始九宫格矩阵,要将它还原成满足数独规则的形式,应该怎么办呢?

S =
     9     6     7     5     3     1     4     8     2
     9     7     1     5     4     2     6     3     8
     6     5     4     3     1     9     8     2     7
     7     6     5     9     3     1     4     2     8
     3     8     1     5     9     4     2     6     7
     7     9     6     1     4     5     
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值