变形的数独问题
题目
http://acm.hdu.edu.cn/showproblem.php?pid=4069
题意
普通的数独问题是要求每个3×3的子矩阵里不能有相同的数字,这题将3×3的子矩阵改成了题目给定的连通区域,每个连通区域的面积为9,其他要求不变。
题目解析
与用舞蹈链解决普通数独问题类似,求解前需要用深度优先搜索找出每个连通区域的范围,然后给每个连通区域编号,用这个编号去代替解决普通数独问题的3×3子矩阵的编号。
这题比较麻烦的是,需要判断是否有两个以上的解,所以在用舞蹈链搜索的时候记录解的个数,如果解的个数大于2个就停止搜索。这里需要注意的是,找到第一个解后需要用数组把搜索过程中选择的行保存下来,因为下一次搜索不一定能得到第二个正确答案,但是在求解的过程中会取得第一个答案选择的行覆盖掉,所以不能用搜索选择的行来作为正确答案选择的行。
代码
1 | /* http://acm.hdu.edu.cn/showproblem.php?pid=4069 */ |