c – 我的数独求解器函数出了什么问题?

c – 我的数独求解器函数出了什么问题?,第1张

概述好吧所以我把我的功能改成了回溯功能(我在网上找到).它仍然从文件读取并将其输入数组,检查功能正常工作,所以我没有改变它.如果您想知道以下是我正在尝试解决的难题(其中零是空格). 0 5 0 0 2 0 0 7 07 2 0 4 0 3 0 0 09 0 0 0 5 0 6 2 00 0 5 0 8 6 0 0 01 0 0 0 4 0 0 0 80 0 0 2 3 0 4 0 00 9 好吧所以我把我的功能改成了回溯功能(我在网上找到).它仍然从文件读取并将其输入数组,检查功能正常工作,所以我没有改变它.如果您想知道以下是我正在尝试解决的难题(其中零是空格).

0 5 0 0 2 0 0 7 07 2 0 4 0 3 0 0 09 0 0 0 5 0 6 2 00 0 5 0 8 6 0 0 01 0 0 0 4 0 0 0 80 0 0 2 3 0 4 0 00 9 3 0 1 0 0 0 20 0 0 3 0 2 0 4 60 8 0 0 0 0 0 1 0// backtracking functionvoID Sudoku::solvePuzzle(){int x = 0;int y = 0;int r = 0;bool back_flag;while (r < 81) {    back_flag = true;     x = r/9;    y = r%9;    for(int num = arr[x][y]; num < 10 && back_flag; num++) {        if(check(x,y,num)) {            arr[x][y] = num;            back_flag=false;            break;        }        else if(num >= 9) {            arr[x][y] = 0;        }    }    if(back_flag) {        r--;    }    else {        r++;    }}}
解决方法@H_404_15@ 我不知道这些是否是唯一的错误,但乍一看,我认为不是

if (count == 1 && arr[r][c] == 0) {         tempNum = num;    }    else {        tempNum = 0;    }    count++;

它应该是

count++;    if (count == 1) {         tempNum = num;    }

而不是

if (count == 1 && check(r,c,num) && arr[r][c] == 0) {         arr[r][c] = tempNum;

它应该是

if (count == 1 && check(r,tempNum)) {         arr[r][c] = tempNum;

要不就

if (count == 1 ) {         arr[r][c] = tempNum;

因为,当count == 1时,如果你的checkfunction没有副作用,那么check(r,tempNum)不能为false.

顺便说一下,如果以这种方式组织代码,代码会更好读取:

for (int r = 0; r < MAX_ROW; r++) {   for (int c  = 0; c < MAX_Col; c++) {       if(arr[r][c] != 0)           continue;           // ** no tests for arr[r][c] == 0 in this code block any more           // ...    }}

最后一件事:如果外循环中的零个数从一次迭代到下一次迭代不再变化,你应该停止算法,你的解算器会有SuDoKus无法解决,你不想让你的程序对于那些人来说,我想是无限循环.

总结

以上是内存溢出为你收集整理的c – 我的数独求解函数出了什么问题?全部内容,希望文章能够帮你解决c – 我的数独求解器函数出了什么问题?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1225687.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存