• C语言 · 8皇后问题改编


    8皇后问题(改编)

    问题描述
      规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大。
    输入格式
      一个8*8的棋盘。
    输出格式
      所能得到的最大数字和
    样例输入
    1 2 3 4 5 6 7 8
    9 10 11 12 13 14 15 16
    17 18 19 20 21 22 23 24
    25 26 27 28 29 30 31 32
    33 34 35 36 37 38 39 40
    41 42 43 44 45 46 47 48
    48 50 51 52 53 54 55 56
    57 58 59 60 61 62 63 64
     
    样例输出
    260
    数据规模和约定
      棋盘上的数字范围0~99
     

    注释:递归题。

    棋盘:qipan[i][j];

    递归参数:当前行:begin;当前八皇后所在格子数字之和:sum;

    递归出口:至多有8个皇后;

    每轮操作都要判断选中位置的行、列、斜三个位置上是否有其他皇后,有则不能放,否则递归下一行(sum=sum+qipan[i][j])——注意标记数组在每一次递归后要恢复。

     1 /*
     2 测试数据: 
     3 1 2 3 4 5 6 7 8
     4 9 10 11 12 13 14 15 16
     5 17 18 19 20 21 22 23 24
     6 25 26 27 28 29 30 31 32
     7 33 34 35 36 37 38 39 40
     8 41 42 43 44 45 46 47 48
     9 48 50 51 52 53 54 55 56
    10 57 58 59 60 61 62 63 64
    11 */
    12 #include<stdio.h>
    13 int max=0,sum;//max表预设一个最大值,sum表所放皇后的位置的元素和
    14 int lie[9];//代表一竖n行
    15 int xie1[2*8];//代表从↖到↘对角线
    16 int xie2[2*8];//代表从↘到↖对角线
    17 int qipan[9][9];//棋盘权值
    18 int ans=0;
    19 void HuangHou(int begin,int sum){
    20     if(begin>8){//表示搜索到了第八行,说明此次为有效搜索 
    21         if(sum>max){
    22             max = sum;//max用来存放最大值 
    23         }
    24         ans++;
    25     }else{
    26         for(int i=1;i<=8;i++){//表每次搜索都是从第一列开始的 
    27             if(lie[i]==0 && xie1[begin+i-1]==0 && xie2[begin-i+8]==0){
    28                 lie[i]=1;
    29                 xie1[begin+i-1]=1;
    30                 xie2[begin-i+8]=1;
    31                 HuangHou(begin+1,sum+qipan[begin][i]);//搜索下一行 
    32                 lie[i]=0;
    33                 xie1[begin+i-1]=0;
    34                 xie2[begin-i+8]=0;
    35             }
    36         }
    37     } 
    38 }
    39 int main(){
    40     for(int i=1;i<=8;i++){//录入棋盘 
    41         for(int j=1;j<=8;j++){
    42             scanf("%d",&qipan[i][j]);
    43         }
    44     }
    45     HuangHou(1,0);//从第一行开始搜索 
    46     printf("总方案数:%d
    格子值最大的:%d",ans,max);
    47     return 0;
    48 }            
  • 相关阅读:
    ecshop 浏览历史样式的修改
    ECSHOP任意页面调用商品属性
    ECShop url路径 商品详情页goods 商品列表页category 修改成你想要的
    ecshop模板增加新lbi库文件注意事项
    最完美带qq昵称qq头像的qq帐号登录ecshop插件
    ECSHOP2.72 前台调用 定单号,及收货人,快递号
    ecshop后台帐号密码忘记了怎么办?
    ECSHOP首页成功实现订单上下滚动
    ECSHOP 注册就送红包
    ECSHOP隐藏帮助中心文章页的评论功能方法
  • 原文地址:https://www.cnblogs.com/panweiwei/p/6674073.html
Copyright © 2020-2023  润新知