나는 첫 번째 가능한 해결책을 반환하는 스도쿠 해결사를 작성하려고합니다. 나는 void 메소드를 사용하여 가능한 모든 해결책을 인쇄 할 수 있었지만 첫 번째 발견에서 멈출 수는 없습니다.이 역 추적으로 만 첫 번째 해결 방법을 찾는 방법
부울 메서드로 전환하고 true
트리를 반환하는 것입니다 - 하지만 올바른 방법을 찾을 수 없습니다.
나는 항상 컴파일 오류 (method must return boolean
)를 시도 어떤 식 으로든.
public boolean recursiveSolve(int line, int column) {
if(line == N) // N is the board size (9)
return true;
// if Cell is not empty - continue
if(board1.getCell(line, column) != 0) {
return nextCell(line, column);
}
// if Cell empty - solve
else {
for(int i = 1; i <= N; i++) {
board1.setCell(line, column, i); // set value to cell
if(board1.boardIsOk()) // check if the board is legal
return nextCell(line, column); // continue
}
board1.setCell(line, column, 0); // backtrack
}
}
private boolean nextCell(int line, int column) {
if(column < 8)
return recursiveSolve(line, column+1); // progress up the row
else
return recursiveSolve(line+1, 0); // progress down the lines
}
모든 도움을 주시면 감사하겠습니다.
스도쿠에는 단 하나의 솔루션 만 있으면 안됩니까? –
.boardIsOk()의 출처는 어디입니까? 또한 nextCell을 변수에 저장하고 for 루프를 실행할 때마다 해당 var 값을 확인해야한다는 것을 알려줍니다. 일단 발이 당신이 원하는 것을 치면, 돌아 오십시오. – Kristian
@ EmilVikström : 빈 보드로이 방법을 활성화하십시오. – amit