퍼즐을 풀려고 할 때 역 추적을 사용하는이 스도쿠 솔버를 찾았습니다. 더 나은 이해를 위해 역 추적을 분석 할 수 있도록 프로세스를 지연시키고 싶습니다. 그러나 나는 그것을 어떻게하는지 정말로 모른다. 나는 Thread.sleep(100);
을 사용하려고 노력했지만 실제로 지연을 정확히 어디에 두어야하는지 알지 못합니다.Delay recursive backtracking java
abstract class SudoKiller {
private SudokuBoard sb; // Puzzle to solve;
public SudoKiller(SudokuBoard sb) {
this.sb = sb;
}
private boolean check(int num, int row, int col) {
int r = (row/sb.box_size) * sb.box_size;
int c = (col/sb.box_size) * sb.box_size;
for (int i = 0; i < sb.size; i++) {
if (sb.getCell(row, i) == num ||
sb.getCell(i, col) == num ||
sb.getCell(r + (i % sb.box_size), c + (i/sb.box_size)) == num) {
return false;
}
}
return true;
}
public boolean guess(int row, int col) {
int nextCol = (col + 1) % sb.size;
int nextRow = (nextCol == 0) ? row + 1 : row;
try {
if (sb.getCell(row, col) != sb.EMPTY)
return guess(nextRow, nextCol);
}
catch (ArrayIndexOutOfBoundsException e) {
return true;
}
for (int i = 1; i <= sb.size; i++) {
if (check(i, row, col)) {
sb.setCell(i, row, col);
if (guess(nextRow, nextCol)) {
return true;
}
}
}
sb.setCell(sb.EMPTY, row, col);
return false;
}
}
전체 프로젝트는 the authors site에서 찾을 수 있습니다.
디버거를 통해 단계별로 진행하십시오. –
메신저 꽤 잘 모르겠다. 디버그하는 방법을 알지 못한다. – Michael
[재귀] (http://en.wikipedia.org/wiki/Recursion_%28computer_science%29) 메소드 호출을 찾아라. 호출하기 전에 잠자고 싶다. –