37 条题解
-
0
#include <iostream> using namespace std; // 检查数字num是否可以放在(row,col)位置 bool isSafe(int grid[9][9], int row, int col, int num) { // 检查行 for (int d = 0; d < 9; d++) { if (grid[row][d] == num) { return false; } } // 检查列 for (int r = 0; r < 9; r++) { if (grid[r][col] == num) { return false; } } // 检查3x3小格子 int boxStartRow = row - row % 3; int boxStartCol = col - col % 3; for (int r = boxStartRow; r < boxStartRow + 3; r++) { for (int d = boxStartCol; d < boxStartCol + 3; d++) { if (grid[r][d] == num) { return false; } } } return true; } // 数独求解函数 bool solveSudoku(int grid[9][9]) { int row, col; // 检查是否还有空格 bool isEmpty = false; for (row = 0; row < 9; row++) { for (col = 0; col < 9; col++) { if (grid[row][col] == 0) { isEmpty = true; break; } } if (isEmpty) { break; } } // 如果没有空格了,数独已解 if (!isEmpty) { return true; } // 尝试填入数字1-9 for (int num = 1; num <= 9; num++) { if (isSafe(grid, row, col, num)) { grid[row][col] = num; if (solveSudoku(grid)) { return true; } // 回溯 grid[row][col] = 0; } } return false; } // 打印数独 void printGrid(int grid[9][9]) { for (int row = 0; row < 9; row++) { for (int col = 0; col < 9; col++) { cout << grid[row][col]; if (col != 8) { cout << " "; } // 九宫格之间加三个空格 if (col == 2 || col == 5) { cout << " "; } } cout << endl; // 九宫格之间加空行 if (row == 2 || row == 5) { cout << endl; } } } int main() { int grid[9][9]; // 读取输入 for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { cin >> grid[i][j]; } } if (solveSudoku(grid)) { printGrid(grid); } else { cout << "无解" << endl; } return 0; }
信息
- ID
- 1
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- 递交数
- 4607
- 已通过
- 1304
- 上传者