一年前的程序,可以生成一个数独的九宫格。当时想这种方法想了3天,终于实现了。由于当时刚熟悉指针,因此指针用的比较多。本人比较懒,先把代码贴出来,后序补充具体实现方法。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int a[9][9] = { 0 };
int *p[3][3], *m[3][6], *n[3][6], *r[9][4], *aa[9][9];
int **q[9];
int i, j, k, l, h, t, s = 0;
void rank(int *x, int *y);
bool check(int a[9][9], int n);
srand((int)time(0));
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
p[i][j] = &a[i * 3 + 1][j * 3 + 1];
for (k = 0; k < 9; k++)
q[k] = &p[k / 3][k % 3];
for (i = 0; i < 3; i++)
for (j = 0; j < 6; j++)
{
m[i][j] = &a[i * 3 + 1][2 * j - j / 2];
n[i][j] = &a[2 * j - j / 2][i * 3 + 1];
}
for (k = 0; k < 9; k++)
for (l = 0; l < 4; l++)
r[k][l] = &a[(k / 3) * 3 + (l / 2) * 2][(k % 3) * 3 + (l % 2) * 2];
for (i = 0; i < 9; i++)
for (j = 0; j < 9; j++)
aa[i][j] = &a[i][j];
step1:
for (i = 0; i < 9; i++)
{
next1:
**q[i] = rand() % 10;
if (**q[i] == 0)
goto next1;
for (j = 0; j < i; j++)
if (**q[j] == **q[i])
goto next1;
}
step2:
for (i = 0; i < 3; i+