八皇后问题的全排列解法
2012-07-24 22:05
204 查看
参看我写过的一篇全排列的递归算法
#include <iostream> using namespace std; int total = 0; //交换函数 void swapArray(int &a,int &b) { int temp; temp = a; a = b; b = temp; } //判断是否在对角线 bool checkDiagonal(int * fullArray,int number) { for(int i=0; i<number; i++) { for(int j=i+1; j<number; j++) { if(i-j == fullArray[i] - fullArray[j] || j-i == fullArray[i] - fullArray[j]) { return false; } } } return true; } //递归函数 void fullPermutation(int * fullArray,int start,int end,int number) { //这里,既可以是">=",也可以是">",,应该也可以是"==" if(start>=end) { if(checkDiagonal(fullArray,number)) { for(int i=0; i<number; i++) { cout<<fullArray[i]; } cout<<endl; total++; } } else { for(int i=start; i<=end; i++) { swapArray(fullArray[start],fullArray[i]);//交换 fullPermutation(fullArray,start+1,end,number); swapArray(fullArray[start],fullArray[i]);//注意恢复原样 } } } int main() { int number;//全排列的长度 cout<<"Number:"<<endl; cin>>number; int * fullArray = new int[number];//动态生成全排列的数组 //初始化 for (int i=0; i<number; i++) { fullArray[i] = i+1; } fullPermutation(fullArray,0,number-1,number); cout<<"Total = "<<total; return 0; }
相关文章推荐
- 八皇后问题的位操作解法
- 八皇后问题的一种解法
- 八皇后问题解法及算法分析
- 运用全排列的方法解决八皇后问题
- 《编程之法》1.3字符串的全排列,组合,重复排列,八皇后问题
- 多维算法思考(二):关于八皇后问题解法的探讨
- 八皇后问题----另类解法
- 八皇后问题简单解法
- 递归--基于排列的八皇后问题解法
- 【LeetCode31-40】全排列,栈的用法,find用法,数独规则及解法,数列,类似找钱问题找出所有可能,不允许重复的找钱问题
- 八皇后问题解法
- 小白教学式,八皇后问题,Python生成器解法
- 八皇后问题回溯解法
- 八皇后问题的解法
- 八皇后问题最简单的解法
- 八皇后问题:递归和非递归解法
- 八皇后问题的分析与解法
- 八皇后问题两种基本解法
- 八皇后问题 递归解法
- 八皇后问题解法(Lua版)