解数独
编写一个函数,用于解决数独问题。给定一个9x9的数独,要求填入数字使得每一行、每一列和每一个以粗实线分隔的3x3宫内的数字均不重复。
*/
class sudo {
public:
vector<vector<int>> s;
bool is(int n, int a, int b) {
for (int i = 0; i < 9; i++) {
if (i != a) {
if (s[i][b] == n)return false;
}
}
for (int i = 0; i < 9; i++) {
if (i != b) {
if (s[a][i] == n)return false;
}
}
int m = a / 3 * 3;
int n = b / 3 * 3;
for (int i = m; i <= m + 2; i++) {
for (int j = n; j <= n + 2; j++) {
if (i == a && j == b)continue;
if (s[i][j] == n) {
return false;
}
}
}
return true;
}
bool solve() {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (s[i][j] == 0) {
for (int k = 1; k <= 9; k++) {
if (is(k, i, j)) {
s[i][j] = k;
if(solve())return true;
s[i][j] = 0;
}
}
return false;
}
}
}
return true;
}
};
该篇文章介绍了如何在C++中编写一个解数独的函数,通过is()方法检查是否可以安全地将数字n放入给定的位置,以及solve()方法采用回溯法递归解决数独问题。
1952

被折叠的 条评论
为什么被折叠?



