93 lines
2.9 KiB
C++
93 lines
2.9 KiB
C++
//#include <iostream>
|
|
//#include <vector>
|
|
//#include <functional>
|
|
//using namespace std;
|
|
//
|
|
//bool isValidMove(vector<vector<int>>& board, vector<vector<bool>>& rows, vector<vector<bool>>& cols, vector<vector<bool>>& subgrids, int row, int col, int num) {
|
|
// return !rows[row][num] && !cols[col][num] && !subgrids[row / 3 * 3 + col / 3][num];
|
|
//}
|
|
//
|
|
//bool solveSudoku(vector<vector<int>>& board) {
|
|
// vector<vector<bool>> rows(9, vector<bool>(10, false)); // 行中数字存在情况
|
|
// vector<vector<bool>> cols(9, vector<bool>(10, false)); // 列中数字存在情况
|
|
// vector<vector<bool>> subgrids(9, vector<bool>(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<bool(int, int)> 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<vector<int>> sudokuBoard(9, vector<int>(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;
|
|
//}
|