ここに私の最初の質問があり、私は誰かが私を助けることを願っています。 私はiPhoneプログラミングの新機能で、簡単なアプリを試してみたいと思っています。 これは再帰的メソッドで動作しているSudokuSolverです。 Javaではこのコードは問題ありませんが、Objective-Cでは数独が解決されたときにコードが停止することはありません。それはまだ数独を解決しようとしており、後で止まります。再帰的な目的-c voidメソッドの問題
誰かアイデアか。
ここにコードがあります。
- (SudokuSolver *) initWithField: (int[9][9]) field {
self = [super init];
if(self) {
for (int i=0; i<9; i++) {
for (int j=0; j<9; j++) {
sudokuField[i][j] = field[i][j];
if (field[i][j]) {
sudokuFieldStatic[i][j] = 1;
} else {
sudokuFieldStatic[i][j] = 0;
}
}
}
}
return self;
}
- (void) solve {
[self solveFieldAtRow:0 andCol:0];
}
- (void) solveFieldAtRow: (int) row andCol: (int) col {
if (row > 8) {
return;
} else {
while (sudokuField[row][col] != 0) {
if (++col > 8) {
col = 0;
row++;
if (row > 8) {
return;
}
}
}
for (int num=1; num<10; num++) {
if ([self checkRow:row forNumber:num] && [self checkCol:col forNumber:num] && [self checkFieldAtRow:row andCol:col forNumber:num]) {
sudokuField[row][col] = num;
[self showFieldInConsole:0];
if (col < 8) {
[self solveFieldAtRow:row andCol:col+1];
} else {
[self solveFieldAtRow:row+1 andCol:0];
}
}
}
sudokuField[row][col] = 0;
}
}
あなたは 'sudokuField'の宣言と初期化を共有できますか? – mvds
いくつかのコードはここにはないので、クイックチェックとして:コンパイラの警告が出ますか? 'checkRow'などで問題が発生した場合。常にゼロ以外の値を返すと、解決するまでに時間がかかることがあります。 – mvds
再帰パターンはあまり明確ではありません。 'row> = 9 ||これを書き換えることをお勧めします。 'solveFieldAtRow'メソッドの開始時にcol> = 8'チェックを行います。 –