线程优化大赛6月的题目,6*6数独!
数独(Sudoku)是一种逻辑谜题游戏,解答方法是将数字放到珊格里,但同行同列或者同一个子块里不能有相同的数字。通常珊格一般取 9x9。这样的话,每一行每一列以及这 9 个 3x3 的不重叠子块的每一个,都会包括整数 1-9 的一个具体实例。除了 9x9 的珊格外,也有可能会用 16x16 或者 6x6 的,还有一些变化形式并不使用方形的子块。
问题:写一个分析程序判断 6x6 的数独(Sudoku)谜题是否有唯一解。正确的解应该将数字 1-6 不重复的放到每一行每一列。同样的,不相重叠的 2x3 子块(2行,3列)必须包含这六个整数的一个唯一的实例。例如:
2 3 1 | 4 5 6
6 5 4 | 3 2 1
---------------
1 4 3 | 5 6 2
5 6 2 | 1 3 4
---------------
3 1 6 | 2 4 5
4 2 5 | 6 1 3
输入文件描述:当程序开始执行时,将输入文件的名字送入,通常是以命令行参数的形式。输入文件会包含一定数量的行,每行有 36 个非空子符。每行代表了在一个可能的 6×6 数独(Sudoku)谜题的初始状态下,全部字符的逐行排列。迷题初始状态中的空格将由星号字符代替。文件的结尾表示输入的结束。
输出:输出要标准化。应该指出每一个输入谜题是有唯一解,无解还是有多解。
一次输入 3 个谜题的输入示例:
*314*******1**356**621**3*******561*
***4****41*2*4321**6534*5*16****6***
5******5******5******5******5******5
(第一行对应了上面已解决的那个谜题在初始状态下的字符排列)
输出举例:
谜题 # 1 有唯一解
谜题 # 2 无解
谜题 # 3 有多解