You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.7 KiB

/*-------------------*/
/*实验:数独矩阵------*/
/*2.随机生成一个 9×9 的不完整的矩阵;*/
/*-------------------*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void randseedInit(){
srand(time(NULL));
}
void makeNSeq(int _seq[],int n){//产生1-n的不重复序列传入一个数组名指针
int ct[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
int i;
for (i = 0; i < n; i++) {
int t = rand() % n;
while(ct[t=rand() % n]);
ct[t]++;
_seq[i] = t+1;
}
}
void initBoard(int _board[9][9]){
int i,j;
for (i = 0; i < 9;i++)
for ( j = 0; j < 9;j++)
_board[i][j] = 0;
}
void makeRandomBoard(int _board[9][9]){
initBoard(_board);
int i_1;
for (i_1 = 0; i_1 < 3;i_1++){
int seq[9];
makeNSeq(seq, 9);
int i;
for ( i = 0; i < 3;i++){
int where[9];
makeNSeq(where, 9);
int idx;
for ( idx = 0; idx < 3;idx++){
_board[i_1 * 3 + i][where[idx+i*3]-1] = seq[idx+i*3];
}
}
}
}
void printBoad(int _board[9][9]){
int i;
for ( i = 0; i < 9;i++){
if(!(i%3))printf("|-----------------------|\n");
int j;
for ( j = 0; j < 9;j++){
if(!(j%3))
printf("| ");
if(_board[i][j]==0)
printf(". ");
else
printf("%d ", _board[i][j]);
}
printf("|\n");
}
printf("|-----------------------|\n");
}
int main(){
randseedInit();
int board[9][9];
makeRandomBoard(board);
printBoad(board);
}