运用c语言随机生成一个数独终盘
时间: 2024-03-15 07:42:07 浏览: 82
好的,以下是一个用 C 语言随机生成数独终盘的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 9
#define M 81
int sudoku[N][N]; // 数独终盘数组
// 检查某个数是否可以填在指定的行、列和九宫格中
int check(int row, int col, int num) {
int i, j;
// 检查行
for (j = 0; j < N; j++) {
if (sudoku[row][j] == num) {
return 0;
}
}
// 检查列
for (i = 0; i < N; i++) {
if (sudoku[i][col] == num) {
return 0;
}
}
// 检查九宫格
int r = row / 3 * 3;
int c = col / 3 * 3;
for (i = r; i < r + 3; i++) {
for (j = c; j < c + 3; j++) {
if (sudoku[i][j] == num) {
return 0;
}
}
}
return 1;
}
// 递归生成数独终盘
int generate(int k) {
if (k == M) {
return 1; // 数独终盘已经生成完毕
}
int i, j, n;
int arr[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// 随机排序数组
for (i = 0; i < N; i++) {
j = rand() % N;
n = arr[i];
arr[i] = arr[j];
arr[j] = n;
}
// 逐个尝试填入数字
int row = k / N;
int col = k % N;
for (i = 0; i < N; i++) {
if (check(row, col, arr[i])) {
sudoku[row][col] = arr[i];
if (generate(k+1)) {
return 1; // 数独终盘已经生成完毕
}
sudoku[row][col] = 0;
}
}
return 0; // 数独终盘生成失败
}
int main() {
srand(time(NULL)); // 初始化随机数种子
generate(0); // 生成数独终盘
int i, j;
// 输出数独终盘
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%d ", sudoku[i][j]);
}
printf("\n");
}
return 0;
}
```
这个示例代码可以生成一个随机的数独终盘,并输出到控制台上。您可以根据需要对代码进行修改和完善。
阅读全文