teacher_code_c/数独.cpp

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;
//}