이것은 스도쿠 - 솔버를위한 것으로 각 사각형마다이 방법이 있습니다. 내 생각에이 메서드의 한 인스턴스가 유효한 값을 찾지 않고 루프를 통과하면 for 루프에서 다음 값을 사용하여 루프를 호출 한 이전 메서드로 돌아가서 루프를 계속 진행합니다. 나는 이것이 역 추적을 위해 충분할 것이기를 바랬지 만, 나의 모든 시험은 실패하고 어떻게 내가이 문제를 해결할 것인가에 관해서는 완전히 단서가 없다./종료 멍청한 놈-애도 여기가짜 재귀 적 방법으로 역 추적을 통합하는 방법을 알 수 없습니다.
public boolean recursive() {
for(int i = 1; i <= boardSize; i++) {
if(!validValue(i)) {
continue;
} else {
setValue(i);
if(getNext() == null) // This signifies that I am at the end of the list
return true;
else
getNext().recursive(); // same method in the next sudoku square
}
}
return false;
}
이 코드는 무슨 일이 벌어지는 지보기에 충분하지 않습니다. 알고리즘의 구조는 무엇이며'validValue','setValue','getNext','recursive'는 무엇을합니까? 내가 틀린 것을 자신있게 말할 수는 없지만, 내 추측은 당신이 역 추적 중 변경 사항을 취소하지 않는다는 것입니다. 검색이 솔루션을 찾지 못하면 역 추적하기 전에 변경된 영구 상태를 재설정해야합니다. – Heatsink
죄송합니다. 메소드 이름이 자명하다는 생각이 들었습니다. validValue (i)는 정사각형과 관련된 box/row/column에 i가 있는지를 확인합니다. setValue()는 각 사각형의 값을 설정하는 것입니다. getNext()는 스도쿠 보드에서 다음 사각형을 반환합니다. 이걸 보지 못해서 미안하지만 setValue() 메서드가 잘못된 값을 덮어 쓰는 경우 값을 다시 설정해야하는 이유는 무엇입니까? – jollyroger
그러면 귀하의 경우와 관련이 없을 것입니다. 일부 검색 알고리즘에서 재귀 인스턴스는 이전 단계의 추측을 덮어 쓸 수 있습니다. 각 재귀 인스턴스는 알고리즘에서 데이터의 개별 부분을 수정하기 때문에 실행 취소는 중요하지 않습니다. – Heatsink