计蒜客--八皇后问题

Posted pythonbigdata

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计蒜客--八皇后问题相关的知识,希望对你有一定的参考价值。

技术分享图片

技术分享图片

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])是否在同一条对角线上。



以上是关于计蒜客--八皇后问题的主要内容,如果未能解决你的问题,请参考以下文章

计蒜客 奶酪 (并查集)

计蒜客之判断质数

计蒜客练习题:素数距离

计蒜客 《程序设计竞赛体验课程》第一部分 快速提升代码能力

计蒜客斑点蛇

计蒜客课程竞赛入门--统计三角形 代码流程摘记