- 代码实现
- 运行结果
n后问题就是有一个n*n的棋盘,在这个棋盘中放n个皇后,使得这n个皇后,任意两个皇后不在同一行,同一列,同一条对角线。
代码实现这里采用的是暴力递归法:
#include运行结果#include #include bool place(int* paraSolution,int paraT) { int j; for(j = 1;j < paraT;j ++) { if((abs(paraT - j) == abs(paraSolution[j] - paraSolution[paraT])) || (paraSolution[j] == paraSolution[paraT])) { return false; } } return true; } void backtracking(int* paraSolution,int paraN,int paraT) { int i; if(paraT > paraN) { for(i = 1;i <= paraN;i ++) { printf("%d",paraSolution[i]); } printf("rn"); }else { for(i = 1;i <= paraN;i ++) { paraSolution[paraT] = i; if(place(paraSolution,paraT)) { backtracking(paraSolution,paraN,paraT + 1); } } } } void nQueen(int paraN) { int i; int* solution = (int*)malloc((paraN + 1) * sizeof(int)); for(i = 0;i <= paraN;i ++) { solution[i] = 0; } backtracking(solution,paraN,1); } int main() { nQueen(5); return 1; }
13524 14253 24135 25314 31425 35241 41352 42531 52413 53142



