回溯法简单来说就是按照深度优先的顺序,穷举所有可能性的算法,但是回溯算法比暴力穷举法更高明的地方就是回溯算法可以随时判断当前状态是否符合问题的条件。一旦不符合条件,那么就退回到上一个状态,省去了继续往下探索的时间。
那么问题来了,回溯算法能做什么呢?
数独是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复 。
数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,所以又称“九宫格”。
首先,根据数独的规则,如果我们在某个空格填了一个数字,那么该数字所在的行与列还有九宫格不能够与原来的数字重复,根据这个特点,可以大大的减少我们需要计算的组合数。
然后用回溯法对所有组合进行判断,如果遇到不满足条件的数字组合,要回退到上一个合法状态。
根据数独的初始化状态,由不重复的原则,我们可以从每行中挑选出可以供我们选择的数字组合。
如果回溯法的过程中,发现遇到了不合法的数字组合,那么我们要回退到上一个状态去。
最后,如果有一种情况能够遍历到最后一个空格位置,那么说明此刻我们的数独的解已经找到了。
到此回溯算法已经讲解清楚了。
最后一句话总结一下,就是像试水温一样,先放一点进去,如果合适就全放进去,不合适就拿出来等一会再放进去去试试。
喜欢算法的可以关注我,互相交流哦。