저레벨 코스에서 과제로 재귀를 다루는 것은 처음입니다. 나는 인터넷 주위를 둘러 보았고 내가 가진 것과 비슷한 방법을 사용하는 사람을 찾을 수없는 것 같다. (아마도 이것이 왜 작동하지 않는지에 대해 말하고있을 것이다.) 이 오류는 std::__copy_move...
에있는 세그멘테이션 오류입니다. 저는 이것을 C++ STL에있는 것으로 가정합니다. 나는 잠시 동안이 일을 주위에 내 머리를 정리하려고 봤는데 내가 잘못 무슨 일이 일어나고 있는지 알아낼 수 없습니다재귀 역 추적 스도쿠 해 찾기 문제, C++
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
}
다음과 같이 됐건, 내 코드입니다. 모든 제안 사항을 높이 평가합니다! :)
'매트릭스'란 무엇입니까? 이와 같은 세부 정보가 없으면 코드를 디버그하기가 어렵습니다. – Flexo
나는 당신이 알고리즘 디자인을 재검토해야한다고 생각한다. 당신의 재귀의'if' 부분에서'else' 부분에 재귀 적으로 유효성을 검사합니다. 유효성 검사를하지 않습니다. 또한, 재귀 후에 만 val> 9를 체크한다. – arne
은 setval이하는 것을 작성함으로써 시작됩니다. (valid, x, y, val) setval은 다른 (x, y) paires에서 val을 반복해서 지정하려고 시도하지만 어떤 (x, y)와도 유효하지 않은 경우 어떻게됩니까? – lkanab