わかりましたので、関数をバックトラッキング関数に変更しました(オンラインで見つけました)。ファイルから読み取って配列に入力しますが、チェック機能は適切に機能しているため、変更していません。以下は、私が解決しようとしているパズルです (ゼロは空のスペースです)。
0 5 0 0 2 0 0 7 0
7 2 0 4 0 3 0 0 0
9 0 0 0 5 0 6 2 0
0 0 5 0 8 6 0 0 0
1 0 0 0 4 0 0 0 8
0 0 0 2 3 0 4 0 0
0 9 3 0 1 0 0 0 2
0 0 0 3 0 2 0 4 6
0 8 0 0 0 0 0 1 0
// backtracking function
void Sudoku::solvePuzzle()
{
int x = 0;
int y = 0;
int r = 0;
bool back_flag;
while (r < 81) {
back_flag = true;
x = r/9;
y = r%9;
for(int num = arr[x][y]; num < 10 && back_flag; num++) {
if(check(x,y,num)) {
arr[x][y] = num;
back_flag=false;
break;
}
else if(num >= 9) {
arr[x][y] = 0;
}
}
if(back_flag) {
r--;
}
else {
r++;
}
}
}