gpt4 book ai didi

C实现暴力破解数独不起作用

转载 作者:行者123 更新时间:2023-11-30 14:37:46 24 4
gpt4 key购买 nike

我编写了用 C 语言实现暴力破解的代码,但无法运行。

我尝试对其进行调试,但调试器出现无限循环,我需要帮助!

int bruteForce(s_cellBoard board[9][9], int i, int arr_32[]) {
if (i == 81 || i < 0)
return 1;
//if he put number in cell
if (isPossible(board, i, arr_32))
{//check cell that is not givan- can change
do { i++; } while (board[i / 9][i % 9].isGiven);
}
else
{
board[i / 9][i % 9].value = 0;
//check cell tht is not givan- can change
do { i--; } while (board[i / 9][i % 9].isGiven);
}
return bruteForce(board, i, arr_32);
}

此函数是否可以在单元格中输入数字

int isPossible(s_cellBoard board[9][9], int i, int arr_32[])
{
int num = board[i / 9][i % 9].value ? board[i / 9][i % 9].value+1 : 1;
for (; num <= 9 && (!row(board, i, num) || !col(board, i, num) || !block(board, i, num));num++);
if (num<= 9)
{
board[i / 9][i % 9].value = num;
printf("%d\n", board[i / 9][i % 9].value);
return 1;
}
return 0;

}

暴力破解的函数调用

int f_solveSudoku(s_cellBoard board[9][9])
{
int arr_32[513] = { 0 };
initialization32Arr(arr_32);
int i = 0;
while (board[i / 9][i % 9].isGiven) { i++; }
return bruteForce(board, i, arr_32);
}

检查 block 的函数

int block(s_cellBoard board[9][9], int i, int num) {
for (int b, a = 0; a < 3; a++)
{
for (b = 0; b < 3; b++)
{
if (board[((i / 9) - ((i / 9) % 3)) + a][((i % 9) - ((i % 9) % 3)) + b].value == num)
return 0;
}
}
return 1;
}

检查列的函数

int col(s_cellBoard board[9][9], int i, int num) {
int j;
for (j = 0; j < 9; j++)
{
if (board[j][i % 9].value == num)
return 0;
}
return 1;
}

检查行的函数

int row(s_cellBoard board[9][9], int i, int num) {
int j;
for (j = 0; j < 9; j++)
{
if (board[i / 9][j].value == num)
return 0;
}
return 1;
}

最佳答案

bruteForce 函数进行以下修改应该可以工作。我不确定 arr_32[] 参数的用途,因为它似乎没有被使用。

int bruteForce(s_cellBoard board[9][9], int i, int arr_32[]) {
// skip cells with 'given' numbers
while (i < 81 && board[i / 9][i % 9].isGiven)
i++;
if (i == 81)
return 1; // done all the cells, so solution found
// check numbers 1 to 9 for current cell
while (isPossible(board, i, arr_32))
{
// found a possible number for the cell
// so check remaining cells
if (bruteForce(board, i + 1, arr_32))
return 1; // solution found
}
// tried all the numbers for this cell without finding a solution
board[i / 9][i % 9].value = 0; // reset the cell
return 0; // solution not yet found
}

关于C实现暴力破解数独不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57039227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com