本文共 1245 字,大约阅读时间需要 4 分钟。
数独问题解决方案代码实现
.documentElement > div<<问题解决方案的实现]]
using namespace std;
int map[9][9];string ch[9];
// 判断是否可以在指定位置放置数字bool isPlace(int count) {int row = count / 9;int col = count % 9;
// 检查同一行for(int j = 0; j < 9; j++) { if(map[row][j] == map[row][col] && j != col) { return false; }}// 检查同一列for(int j = 0; j < 9; j++) { if(map[j][col] == map[row][col] && j != row) { return false; }}// 检查同一3x3的小格int tempRow = row / 3 * 3;int tempCol = col / 3 * 3;for(int j = tempRow; j < tempRow + 3; j++) { for(int k = tempCol; k < tempCol + 3; k++) { if(map[j][k] == map[row][col] && j != row && k != col) { return false; } }}return true;
}
// 回溯求解void backtrace(int count) {if(count == 81) {// 输出结果cout << "结果:" << endl;for(int i = 0; i < 9; i++) {for(int j = 0; j < 9; j++) {cout << map[i][j] << " ";}}cout << endl;return;}
int row = count / 9;int col = count % 9;if(map[row][col] != 0) { backtrace(count + 1);} else { // 检查能否在此位置放置数字 if(isPlace(count)) { map[row][col] = 0; // 确保这一步能走下去 backtrace(count + 1); }}
}
// 主函数int main() {cin >> ch[0];for(int i = 0; i < 9; i++) {for(int j = 0; j < 9; j++) {map[i][j] = ch[i][j] - '0';}}backtrace(0);return 0;}
<'
转载地址:http://iexgz.baihongyu.com/