// onlynum.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int a[9][9] = { {1, 3, 0, 9, 8, 0, 4, 0, 0}, {0, 0, 5, 1, 3, 0, 0, 8, 9}, {0, 0, 9, 0, 0, 7, 1, 0, 0}, {3, 0, 2, 4, 5, 0, 6, 0, 7}, {4, 5, 0, 0, 7, 0, 0, 0, 8}, {7, 0, 0, 6, 0, 0, 3, 5, 0}, {0, 2, 1, 7, 0, 3, 0, 0, 6}, {8, 0, 3, 0, 0, 4, 9, 7, 0}, {0, 0, 4, 0, 6, 1, 0, 2, 0} }; int b[9][9][9]; for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { for (int k = 0; k < 9; k++) b[i][j][k] = k + 1; } } bool tag = true; while (tag) { // 处理行 for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if (a[i][j] != 0) { for (int k = 0; k < 9; k++) { b[i][k][a[i][j]-1] = 0; b[i][j][k] = 0; } } } } // 处理列 for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if (a[i][j] != 0) { for (int k = 0; k < 9; k++) { b[k][j][a[i][j]-1] = 0; b[i][j][k] = 0; } } } } // 处理方块区 for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if (a[i][j] != 0) { for (int k = 0; k < 9; k++) { b[i/3*3 + k/3][j/3*3 + k%3][a[i][j]-1] = 0; b[i][j][k] = 0; } } } } // 处理后,是否有新的确定的项 tag = false; for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if (a[i][j] == 0) { int count = 0, index = -1;; for (int k = 0; k < 9; k++) { if (b[i][j][k] != 0) { count++; index = k; } } if (count == 1) { a[i][j] = index + 1; b[i][j][index] = 0; tag = true; // 还有优化的余地 } } } } } // 打印结果 for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { cout << a[i][j] <<"/"; for (int k = 0; k < 9; k++) if (b[i][j][k] != 0) cout << b[i][j][k]; cout << "/t"; } cout << endl; } return 0; }