jerryz920
全部博文(5)
2010年(5)
milkywat
分类: C/C++
2010-10-03 12:23:18
#include<stdio.h> #include<algorithm> using namespace std; static const int kTotalRow = 6; static const int kTotalSum = (kTotalRow + 1) * (kTotalRow) / 2; static bool col_exist[kTotalRow][kTotalRow] = { false }; static bool dia_exist[2][kTotalRow] = { false }; static const int* matrix[kTotalRow]; void search(int row) { int numbers[kTotalRow] = {1, 2, 3, 4, 5, 6}; if (row >= kTotalRow) { for (int i = 0; i < kTotalRow; i++) { for (int j = 0; j < kTotalRow; j++) printf("%d ", matrix[i][j]); printf("\n"); } printf("\n"); return; } matrix[row] = numbers; do { bool could_prun = false; for (int i = 0; i < kTotalRow; i++) { int val = numbers[i]; if (col_exist[i][val]) { could_prun = true; break; } } int diag_val1 = numbers[row]; int diag_val2 = numbers[kTotalRow - row - 1]; if (dia_exist[0][diag_val1]) { could_prun = true; } if (dia_exist[1][diag_val2]) { could_prun = true; } if (could_prun) { continue; } for (int i = 0; i < kTotalRow; i++) col_exist[i][numbers[i]] = true; dia_exist[0][diag_val1] = true; dia_exist[1][diag_val2] = true; search(row + 1); for (int i = 0; i < kTotalRow; i++) col_exist[i][numbers[i]] = false; dia_exist[0][diag_val1] = false; dia_exist[1][diag_val2] = false; } while (next_permutation(numbers, numbers + kTotalRow)); } int main(void) { search(0); return 0; }
上一篇:关于内存管理
下一篇:没有了
登录 注册