c++ 数独游戏9*9
时间: 2023-10-18 10:21:57 浏览: 104
好的,以下是一个简单的 C++ 数独游戏实现,使用暴力回溯算法:
```c++
#include <iostream>
using namespace std;
const int N = 9;
int board[N][N];
bool isValid(int row, int col, int num) {
// 检查行和列是否有重复数字
for (int i = 0; i < N; i++) {
if (board[row][i] == num) return false;
if (board[i][col] == num) return false;
}
// 检查 3x3 方格是否有重复数字
int r = row / 3 * 3, c = col / 3 * 3;
for (int i = r; i < r + 3; i++) {
for (int j = c; j < c + 3; j++) {
if (board[i][j] == num) return false;
}
}
return true;
}
bool solve(int row, int col) {
// 如果已经填完所有空格,返回 true 表示解法正确
if (row == N) return true;
// 如果当前行已经填完,换到下一行继续填
if (col == N) return solve(row + 1, 0);
// 如果当前格子已经有数字,换到下一列继续填
if (board[row][col] != 0) return solve(row, col + 1);
// 尝试填入数字 1-9
for (int num = 1; num <= 9; num++) {
if (isValid(row, col, num)) {
board[row][col] = num;
if (solve(row, col + 1)) return true;
board[row][col] = 0;
}
}
return false;
}
int main() {
// 读入数独棋盘
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> board[i][j];
}
}
// 解决数独
if (solve(0, 0)) {
// 输出解法
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << board[i][j] << " ";
}
cout << endl;
}
} else {
cout << "No solution." << endl;
}
return 0;
}
```
该代码使用递归的方法,从左上角开始依次填空,如果某个格子无法填入任何数字,则回溯到上一个格子重新填入数字。isValid 函数用于检查某个数字是否可以填入某个格子中。