用c语言编写随机生成一个9*9的数独数组
时间: 2024-02-24 17:00:45 浏览: 106
好的,以下是用C语言编写随机生成一个9*9的数独数组的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 9
void generateSudoku(int sudoku[][N])
{
int i, j, k, num;
int row, col, boxrow, boxcol;
int count = 0;
int flag = 1;
int temp[N*N] = {0};
// 初始化数独数组
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
sudoku[i][j] = 0;
}
}
// 生成数独数组
while (count < 81) {
// 随机生成一个位置
row = rand() % N;
col = rand() % N;
boxrow = row / 3 * 3;
boxcol = col / 3 * 3;
// 判断该位置是否已经有数字
if (sudoku[row][col] != 0) {
continue;
}
// 随机生成一个数字
for (i = 0; i < N; i++) {
temp[i] = i + 1;
}
for (i = 0; i < N; i++) {
num = temp[i];
k = rand() % (N - i) + i;
temp[i] = temp[k];
temp[k] = num;
}
// 尝试填入数字
flag = 1;
for (i = 0; i < N; i++) {
if (sudoku[row][i] == temp[num-1] ||
sudoku[i][col] == temp[num-1] ||
sudoku[boxrow+i/3][boxcol+i%3] == temp[num-1]) {
flag = 0;
break;
}
}
if (flag) {
sudoku[row][col] = temp[num-1];
count++;
}
}
}
void printSudoku(int sudoku[][N])
{
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%d ", sudoku[i][j]);
}
printf("\n");
}
}
int main()
{
int sudoku[N][N];
// 初始化随机数种子
srand((unsigned)time(NULL));
// 生成数独数组
generateSudoku(sudoku);
// 打印数独数组
printSudoku(sudoku);
return 0;
}
```
该代码使用了随机数生成算法,并且通过遍历行、列和宫格来判断该位置是否可以填入数字。最终生成的数独数组会在控制台上输出。
阅读全文