zoukankan      html  css  js  c++  java
  • 计蒜客--八皇后问题

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


  • 相关阅读:
    数据结构-索引
    CAS自旋volatile变量
    深入理解AQS
    EL表达式
    JSTL 核心标签库 使用
    JSP 九个隐含JSP对象
    jsp基本语法总结
    Commons FileUpLoad 两种上传方式解
    Servlet 异常处理
    Servlet 过滤器 Filter
  • 原文地址:https://www.cnblogs.com/pythonbigdata/p/8748105.html
Copyright © 2011-2022 走看看