计蒜客--八皇后问题

AC代码:

#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
int a[10][10];
int vis[10];
vector<int> v;
void search(int cur,int sum){
    if(cur==8){
        v.push_back(sum);        
    } 

    else for(int i=0;i<8;i++){
        vis[cur]=i;
        int ok=1;
        for(int j=0;j<cur;j++){
            if(vis[cur]==vis[j]||vis[cur]+cur==vis[j]+j||cur-vis[cur]==j-vis[j]){
                ok=0;
                break;
            }
        }
        if(ok){
            search(cur+1,sum+a[cur][vis[cur]]);
        }
        
    }
}
int main(){
    for(int i=0;i<8;i++){
        for(int j=0;j<8;j++){
            scanf("%d",&a[i][j]);
        }
    }
    search(0,0);
    sort(v.begin(),v.end());
    printf("%d",v[v.size()-1]);
    //printf("%d",v.size());
    return 0;
}
注意:既然是逐行放置的,则皇后肯定不会横向攻击,因此只需检查是否纵向和斜向攻
击即可。 条件“cur-C[cur] == j-C[j] || cur+C[cur] == j+C[j]”用来判断皇后(cur,C[cur])
(j,C[j])是否在同一条对角线上。


原文地址:https://www.cnblogs.com/pythonbigdata/p/8748105.html