- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了用 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/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!