用C语言代码实现数独游戏
时间: 2023-11-19 08:06:56 浏览: 162
Java数独游戏代码
以下是一个简单的数独游戏的 C 语言代码实现。它使用了递归和回溯的思想来解决数独游戏。
```c
#include <stdio.h>
#define N 9
void print_board(int board[N][N]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", board[i][j]);
}
printf("\n");
}
}
int is_safe(int board[N][N], int row, int col, int num) {
// check row
for (int i = 0; i < N; i++) {
if (board[row][i] == num) {
return 0;
}
}
// check column
for (int i = 0; i < N; i++) {
if (board[i][col] == num) {
return 0;
}
}
// check box
int box_row = row - row % 3;
int box_col = col - col % 3;
for (int i = box_row; i < box_row + 3; i++) {
for (int j = box_col; j < box_col + 3; j++) {
if (board[i][j] == num) {
return 0;
}
}
}
return 1;
}
int solve(int board[N][N], int row, int col) {
// base case
if (row == N) {
return 1;
}
// go to next row if current row is completed
if (col == N) {
return solve(board, row+1, 0);
}
// skip if the cell is already filled
if (board[row][col] != 0) {
return solve(board, row, col+1);
}
// try numbers from 1 to 9
for (int num = 1; num <= 9; num++) {
if (is_safe(board, row, col, num)) {
board[row][col] = num;
if (solve(board, row, col+1)) {
return 1;
}
board[row][col] = 0;
}
}
return 0;
}
int main() {
int board[N][N] = {
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0}
};
if (solve(board, 0, 0)) {
printf("Solution:\n");
print_board(board);
} else {
printf("No solution exists.\n");
}
return 0;
}
```
在这个代码中,`print_board` 函数用于打印数独面板,`is_safe` 函数用于检查是否可以在某个位置放置一个数字,`solve` 函数使用递归和回溯的方法来解决数独游戏。在 `main` 函数中,我们初始化一个空的数独面板,然后调用 `solve` 函数来解决它。如果找到解决方案,则打印解决方案。否则,打印出“无解”的消息。
注意,这个代码只是一个简单的实现,可能不够高效或完整。如果您需要更完整的代码,请参考其他更完整的实现。
阅读全文