八皇后问题复习

深搜经典题目

递归!!

首先是要确定边界,在确定边界的基础上再去处理数据;

例如八皇后,我们定义每一层为cur(行),开一个一维数组,其中cur相当于下标,内容相当于列位置,直接递归去比较,(其中前n层必定确定成立,只需要判断当前cur层)

C[cur] == C[j]

C[cur]+cur == C[j]+j

行列和

C[cur]-cur == C[j]-j

行列差

如果上述皆不成立,继续递归

#include<iostream>
using namespace std;

int tot,n,que[50];

void dfs(int cur){
    if(cur == n) tot++;
    else for(int i=0;i<n;i++){
        bool ok=true;
        que[cur]=i;
        for(int j=0;j<cur;j++)
            if(que[cur]==que[j] || que[cur]-cur==que[j]-j || que[cur]+cur==que[j]+j)
        {
            ok=false;
            break;
        }
        if(ok) dfs(cur+1);
    }
}

int main(){
    cin>>n;
    tot=0;
    dfs(0);
    cout<<tot;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/rign/p/9962739.html