70,005
社区成员




void sudoku_algorithm(int a[10][10])
{
srand((unsigned)time(NULL));
//sudoku_print(a);
for (int row = 1; row <= 9; row++)
{
int fail_times = 0; // 寻找当前行的解的次数
for (int col = 1; col <= 9; )
{
if(fail_times > 1000) // 寻找次数超过1000次,重置本行和上一行的元素为0
{
for (int i = 1; i <= 9; i++)
{
a[row][i] = 0;
a[row-1][i] = 0;
}
row -= 2; // 因为循环开头会+1,故此处先-2
break; // 重新寻找上一行的解
}
bool flag = sudoku_test(a, row, col); // 判断a[row][col]是否能填数
if(!flag)
{
col = 1;
fail_times++;
continue;
}
int rand_num = rand() % 9 + 1; // 随机数1 ~ 9
bool flag1 = sudoku_row(a, row, col, rand_num); // 判断行约束
if (!flag1)
continue;
bool flag2 = sudoku_col(a, row, col, rand_num); // 判断列约束
if (!flag2)
continue;
bool flag3 = sudoku_mod(a, row, col, rand_num); // 判断模块(宫)约束
if (!flag3)
continue;
a[row][col++] = rand_num;
}
// For Debug //
/*
for (int i = 1; i <= 9; i++)
printf("%d ", a[row][i]);
printf("\n");
*/
}
}
放在这里,那么有没有什么解决方法呢[/quote]
把srand放在main开头啊
void sudoku_algorithm(int a[10][10])
{
srand((unsigned)time(NULL));
//sudoku_print(a);
for (int row = 1; row <= 9; row++)
{
int fail_times = 0; // 寻找当前行的解的次数
for (int col = 1; col <= 9; )
{
if(fail_times > 1000) // 寻找次数超过1000次,重置本行和上一行的元素为0
{
for (int i = 1; i <= 9; i++)
{
a[row][i] = 0;
a[row-1][i] = 0;
}
row -= 2; // 因为循环开头会+1,故此处先-2
break; // 重新寻找上一行的解
}
bool flag = sudoku_test(a, row, col); // 判断a[row][col]是否能填数
if(!flag)
{
col = 1;
fail_times++;
continue;
}
int rand_num = rand() % 9 + 1; // 随机数1 ~ 9
bool flag1 = sudoku_row(a, row, col, rand_num); // 判断行约束
if (!flag1)
continue;
bool flag2 = sudoku_col(a, row, col, rand_num); // 判断列约束
if (!flag2)
continue;
bool flag3 = sudoku_mod(a, row, col, rand_num); // 判断模块(宫)约束
if (!flag3)
continue;
a[row][col++] = rand_num;
}
// For Debug //
/*
for (int i = 1; i <= 9; i++)
printf("%d ", a[row][i]);
printf("\n");
*/
}
}
放在这里,那么有没有什么解决方法呢