八皇后问题

问题:

在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

代码1:(dfs)

#include <bits/stdc++.h>
using namespace std;
int a[10],num=0;

bool check(int n,int i){
    for(int k=1;k<n;k++)
        if(a[k]==i || n-k==abs(a[k]-i))return 0;
    return 1;
}
void ope(int n){
    if(n>8){num++;return;}
    for(int i=1;i<=8;i++)
        if(check(n,i)){
            a[n]=i;
            ope(n+1);
        }
}
int main()
{
    ope(1);
    printf("%d\n",num);
}

 

posted @ 2019-03-16 16:42  frente  阅读(127)  评论(0编辑  收藏  举报