//八皇后问题 //我们用第i个数字代表第i行 //我们用数组中的值来依次代表某个列 //这样我们就保证了行列不发生冲突,我们只用判断两个数字(皇后)是否在对角线上就行了 //代码实现如下: #include<iostream> using namespace std; int count = 0;//统计满足条件的组合 void getEightQueenNum(int *eightQueen,int begin, int len) { if(eightQueen==NULL || len!=8) { return ; } if(begin == len-1)//当begin循环到最后一位时,递归程序退出,如果此时满足条件,则个数count加1 { bool flag = true; for(int i=0; i<len; ++i)//这相当于求数组的排列组合 { for(int j=i+1;j<len; ++j) { if(i-j==eightQueen[i]-eightQueen[j] || i-j==eightQueen[j]-eightQueen[i])//如果在对角线上,则不满足条件 { flag = false; break; } } } if(flag) { ++count; } } else//如果还没有到最后一个 那么继续递归 { for(int i=begin; i<len; ++i) { swap(eightQueen[i], eightQueen[begin]); getEightQueenNum(eightQueen,begin+1, 8); swap(eightQueen[i], eightQueen[begin]); } } } int main() { int eightQueen[8] = {0,1,2,3,4,5,6,7}; getEightQueenNum(eightQueen, 0, 8); cout<<count<<endl; return 0; }
原文:http://blog.csdn.net/huai1693838234/article/details/44629263