zoukankan      html  css  js  c++  java
  • 计蒜客:八皇后+最大和

     1 #include <cstdio>
     2 #include <iostream>
     3 using namespace std;
     4 int n=0;//n皇后
     5 int ans=0;//解个数
     6 bool hashTable[20]={false};//列是否被占有
     7 bool xy[20]={false};//左下-右上对角线占有情况
     8 bool yx[20]={false};//左上-右下对角线占有情况
     9 int val[100][100];//存放每个解的皇后行列号
    10 int maze[100][100];
    11 int P[20]={0};
    12 void dfs(int deep){
    13     if(deep>=n){
    14         ans++;
    15         for(int i=0;i<n;i++){//每找到一个解,就填充val的一行
    16             val[ans][i]=P[i];//val的每一行 填的是每个解的皇后的列号,而val行号是解的号码,列号即是皇后在棋盘上的行号,
                        所填的值是皇后在棋盘上的列号,例:val[2][5]里的值表示第二个解的第五行的皇后在棋盘的列号
    17 } 18 } 19 for(int i=0;i<n;i++){//为每个行deep寻找合适的列 20 if(xy[i+deep]==false&&yx[i-deep+n]==false&&hashTable[i]==false){//与之前的皇后无冲突 21 xy[i+deep]=true; 22 yx[i-deep+n]=true; 23 hashTable[i]=true; 24 P[deep]=i; 25 dfs(deep+1);//继续向下一行搜寻 26 hashTable[i]=false;//恢复状态 27 yx[i-deep+n]=false; 28 xy[i+deep]=false; 29 } 30 } 31 } 32 int main(){ 33 n=8; 34 for(int i=0;i<n;i++){ 35 for(int j=0;j<n;j++){ 36 cin>>maze[i][j];//输入棋盘 37 } 38 } 39 dfs(0);//寻找解并填充 40 int maxn=0; 41 for(int i=0;i<ans;i++){//遍历所有解 42 int mmmaxn=0; 43 for(int j=0;j<n;j++){ 44 mmmaxn+=(maze[j][val[i][j]]);//把每个解的八个棋牌格的值加起来,val[i][j]是皇后所在棋盘的列号 45 } 46 maxn=max(maxn,mmmaxn);//寻找最大值 47 } 48 cout<<maxn<<endl;//输出最大值 49 return 0; 50 }
  • 相关阅读:
    发现了一个前端导航网站
    git 设置区分大小写
    分享一个 thinkphp 分页的24款样式
    thinkphp5结合layui表单和图片上传
    tp5分页+循环子字段
    tp5 + layui 分页
    composer的安装
    thinkphp 管道写法及volist标签属性
    把常见的分隔符按照自定义的格式分割
    spring mvc 框架下的maven打包发布方法
  • 原文地址:https://www.cnblogs.com/nilbook/p/13466818.html
Copyright © 2011-2022 走看看