题目:
数独是一个我们都非常熟悉的经典游戏,运用计算机我们可以很快地解开数独难题,现在有一些简单的数独题目,请编写一个程序求解。
输入描述:
输入9行,每行为空格隔开的9个数字,为0的地方就是需要填充的。
输出描述:
输出九行,每行九个空格隔开的数字,为解出的答案。
参考答案
#include <iostream> using namespace std; /* 0 0 0 0 0 2 0 5 0 0 7 8 0 0 0 3 0 0 0 0 0 0 0 4 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 3 0 7 0 8 2 0 0 0 0 0 0 4 0 0 0 0 0 0 5 0 9 0 0 1 0 0 7 0 0 0 0 */ int nums[9][9]; bool sign = false; // 读取输入 void input() { char temp[9][9]; for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { cin >> temp[i][j]; nums[i][j] = temp[i][j] - '0'; } } } bool check(int n, int k) { //检查所在行是否合法 for (int i = 0; i < 9; i++) { int j = n / 9; if (nums[j][i] == k) return false; } //判断所在列是否合法 for (int i = 0; i < 9; i++) { int j = n % 9; if (nums[i][j] == k) return false; } //判断n所在小九宫格是否合法 int x = n / 9 / 3 * 3; int y = n % 9 / 3 * 3; for (int i = x; i < x + 3; i++) { for (int j = y; j < y + 3; j++) { if (nums[i][j] == k) return false; } } //全部合法 return true; } void DFS(int n) { if (n > 80) { sign = true; return; } if (nums[n / 9][n % 9] != 0) { DFS(n + 1); } for (int i = 1; i <= 9; i++) { if (check(n, i)) { nums[n / 9][n % 9] = i; DFS(n + 1); if (sign == true) { return; } else { nums[n / 9][n % 9] = 0; } } } } int main() { input(); DFS(0); for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { cout << nums[i][j] <<" "; } cout << endl; } return 0; }