//#include //#include //#include //using namespace std; // //bool isValidMove(vector>& board, vector>& rows, vector>& cols, vector>& subgrids, int row, int col, int num) { // return !rows[row][num] && !cols[col][num] && !subgrids[row / 3 * 3 + col / 3][num]; //} // //bool solveSudoku(vector>& board) { // vector> rows(9, vector(10, false)); // 行中数字存在情况 // vector> cols(9, vector(10, false)); // 列中数字存在情况 // vector> subgrids(9, vector(10, false)); // 九宫格中数字存在情况 // // // 根据初始棋盘初始化存在情况表格 // for (int i = 0; i < 9; ++i) { // for (int j = 0; j < 9; ++j) { // int num = board[i][j]; // if (num != 0) { // rows[i][num] = true; // cols[j][num] = true; // subgrids[i / 3 * 3 + j / 3][num] = true; // } // } // } // // // 使用回溯法解数独 // function backtrack = [&](int row, int col) -> bool { // if (row == 9) { // return true; // 所有单元格填满,基本情况 // } // // if (board[row][col] == 0) { // for (int num = 1; num <= 9; ++num) { // if (isValidMove(board, rows, cols, subgrids, row, col, num)) { // board[row][col] = num; // rows[row][num] = true; // cols[col][num] = true; // subgrids[row / 3 * 3 + col / 3][num] = true; // // if (col == 8) { // if (backtrack(row + 1, 0)) { // return true; // } // } // else { // if (backtrack(row, col + 1)) { // return true; // } // } // // board[row][col] = 0; // rows[row][num] = false; // cols[col][num] = false; // subgrids[row / 3 * 3 + col / 3][num] = false; // } // } // } // else { // if (col == 8) { // return backtrack(row + 1, 0); // } // else { // return backtrack(row, col + 1); // } // } // // return false; // 没有找到有效的移动 // }; // // return backtrack(0, 0); //} // //int main() { // vector> sudokuBoard(9, vector(9, 0)); // // for (int i = 0; i < 9; ++i) { // for (int j = 0; j < 9; ++j) { // cin >> sudokuBoard[i][j]; // } // } // // if (solveSudoku(sudokuBoard)) { // for (const auto& row : sudokuBoard) { // for (int num : row) { // cout << num << " "; // } // cout << endl; // } // } // // return 0; //}