递归-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); } } }

 

posted @ 2020-07-03 21:16  安之若醇  阅读(136)  评论(0编辑  收藏  举报
Live2D服务支持