递归-N皇后问题
// // #include <stdio.h> /*可以用回溯,但是我已经不太熟悉回溯了!!!!!!!!呜呜呜 * */ #include <iostream> #include <math.h> using namespace std; int a[9]={0}; //bool b[100]={0},c[100]={0},d[100]={0}; int sum=0; void search(int k,int N); int main(){ int N; while(cin>>N && N!=0) { search(0, N); cout << sum<<endl; sum=0;
for (int i = 0; i < N; ++i) {
a[i]=0;
} } return 0; } void search(int k,int N){ if(k==N){ sum++; return ; } int j; int p; /* * 就纯递归,每次挨个比前面的 * 如果j==k说明前面都没有问题,可以赋值 */ for(p=0;p<N;p++) { int ok=1; for (j = 0; j < k ; ++j) { if (p == a[j] || abs(j - k) == abs(a[j] - p)) { ok=0; break; } } if (ok ) { a[k]=p; search(k+1,N); } } }
为了自己,和那些爱你的人