gpt4 book ai didi

c++ - 递归回溯数独求解器问题,C++

转载 作者:行者123 更新时间:2023-11-30 04:32:07 25 4
gpt4 key购买 nike

这是我第一次在低级类(class)中将递归作为作业处理。我环顾了互联网,似乎找不到任何人使用与我想出的方法类似的方法(这可能说明了为什么这不起作用)。该错误是 std::__copy_move... 中的段错误,我假设这是 c++ STL 中的错误。任何人,我的代码如下:

bool sudoku::valid(int x, int y, int value)
{
if (x < 0) {cerr << "No valid values exist./n";}

if (binary_search(row(x).begin(), row(x).end(), value))
{return false;} //if found in row x, exit, otherwise:
else if (binary_search(col(y).begin(), col(y).end(), value))
{return false;} //if found in col y, exit, otherwise:
else if (binary_search(box((x/3), (y/3)).begin(), box((x/3), (y/3)).end(), value))
{return false;} //if found in box x,y, exit, otherwise:
else
{return true;} //the value is valid at this index
}

int sudoku::setval(int x, int y, int val)
{
if (y < 0 && x > 0) {x--; y = 9;} //if y gets decremented past 0 go to previous row.
if (y > 8) {y %= 9; x++;} //if y get incremented past 8 go to next row.

if (x == 9) {return 0;} //base case, puzzle done.
else {
if (valid(x,y,val)){ //if the input is valid
matrix[x][y] = val; //set the element equal to val
setval(x,y++,val); //go to next element
}
else {
setval(x,y,val++); //otherwise increment val
if(val > 9) {val = value(x,y--); setval(x,y--,val++); }
} //if val gets above 9, set val to prev element,
} //and increment the last element until valid and start over
}

一段时间以来,我一直在努力思考这件事,但我似乎无法弄清楚出了什么问题。非常感谢任何建议! :)

最佳答案

sudoku::setval 应该返回一个 int 但至少有两条路径根本不返回任何内容。您应该弄清楚它需要在其他路径中返回什么,否则您将获得随机的未定义行为。

关于c++ - 递归回溯数独求解器问题,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7876879/

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