用c语言写一个数独生成器
时间: 2024-12-22 10:16:11 浏览: 15
在 C 语言中编写一个简单的数独生成器可能涉及到数组、循环和条件判断。这里给出一个基础版的随机填充数独矩阵的示例,不是完整的数独求解算法,因为真正的生成器需要有递归回溯等复杂逻辑来保证每一行、每列和每个宫格的数字都唯一且合法。
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 9
// 数组表示数独的 9x9 矩阵
int Sudoku[SIZE][SIZE];
// 验证是否在指定范围内且格子为空
bool is_valid(int row, int col, int num) {
for (int i = 0; i < SIZE; i++) {
if (Sudoku[row][i] == num || Sudoku[i][col] == num)
return false;
}
int box_row = row - col % 3;
for (int i = box_row; i < box_row + 3; i++)
for (int j = box_col; j < box_col + 3; j++)
if (Sudoku[i][j] == num)
return false;
return true;
}
void generate_sudoku() {
srand(time(0)); // 初始化随机种子
for (int row = 0; row < SIZE; row++) {
for (int col = 0; col < SIZE; col++) { // 遍历每一个格子
while (!is_valid(row, col, 1)) { // 从1开始尝试填入
Sudoku[row][col] = rand() % 10 + 1; // 生成1到9之间的随机数
}
}
}
// 打印结果
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
printf("%d ", Sudoku[i][j]);
if (j % 3 == 2) printf("\n"); // 每三列打印换行
}
if (i % 3 != 2) printf("\n"); // 每三行也换行
}
}
int main() {
generate_sudoku();
return 0;
}
```
阅读全文