solve函数c语言_c语言:回溯解数独程序

本文介绍了如何使用C语言实现数独的回溯解法。通过回溯算法解决数独问题,当找到一个解时返回1,只打印一个解。程序包括主函数solve,其中涉及的辅助函数用于寻找空位、测试数字、尝试填入和恢复状态。数独数据结构和题目读取函数也在文中提及。
摘要由CSDN通过智能技术生成

大家知道数独吗?

九宫格数独,是一种源自18世纪末的瑞士,后在美国发展、并在日本得以发扬光大的数字谜题。数独盘面是个九宫,每一宫又 分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一 宫中都只出现一次。这种游戏全面考验做题者观察能力和推理能力,虽然玩法简单,但数字排列方式却千变万化,所以不少教育者认为数独是训练头脑的绝佳方式

刚开始接触这种戏的时候,我是茶饭不思,一天的时间将我那本书上所有难度的题目全部解决,最长的一个花了将近3小时的时间。后来觉得自己用手算没意思,便想用c语言写一个程序还解数独。不过,那时的我“功力尚浅”,自然没能解决这个问题。

最近在学算法的时候,看到了回溯的那一章。自己认认真真的想了一下回溯的过程,发现与解数独很类似:自己手算数独遇到一个空有两种可能,我假设其中一个成立,推理下去。如果后面遇到矛盾就退回来,另外一个可能肯定就是了。

好了,我思考了一下。将解数独的伪代码写了出来:

如果填好的数是81,就代表问题解决,打印结果

否则:

选择一个没有填数的位置

For(i = 1;i < 10;i++){

如果i能填入这里(利用数独规则)

填入i,进入下一次回溯

恢复回溯前的状态

否则

Continue

}

 
 

回溯使用了递归,所以整个程序很简洁。将上面的源代码转换成c代码如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值