大佬教程收集整理的这篇文章主要介绍了c – 我的数独求解器函数出了什么问题?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
0 5 0 0 2 0 0 7 0 7 2 0 4 0 3 0 0 0 9 0 0 0 5 0 6 2 0 0 0 5 0 8 6 0 0 0 1 0 0 0 4 0 0 0 8 0 0 0 2 3 0 4 0 0 0 9 3 0 1 0 0 0 2 0 0 0 3 0 2 0 4 6 0 8 0 0 0 0 0 1 0 // BACktracking function void 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++; } } }
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 – 我的数独求解器函数出了什么问题?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。