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\n格子值最大的:%d",ans,max);
47     return 0;
48 }            

转载于:https://www.cnblogs.com/panweiwei/p/6674073.html

C语言 · 8皇后问题改编相关推荐

  1. 1-C语言 8皇后问题 (For循环解法)

    本方法适合于刚开始接触c语言的同学. 问题描述:如图所示八皇后问题实在8x8的国际象棋棋盘上摆放8个皇后,使其不可相互攻击,也就是说任意两个皇后不可以在同一行.同一列.同一斜线上,问:有多少种摆法. ...

  2. C语言 · 8皇后问题

    题目:8皇后问题 在8×8的棋盘上,放置8个皇后(棋子),使两两之间互不攻击.所谓互不攻击是说任何两个皇后都要满足: (1)不在棋盘的同一行: (2)不在棋盘的同一列: (3)不在棋盘的同一对角线上. ...

  3. 软件设计师c语言算法皇后,软件设计师历年试题-算法.ppt

    软件设计师历年试题-算法 1996年下午试题三 [E-R图] 1996年下午试题三 [问题] 填充下列 SQL 程序 3.1-3.4 中的 ①-⑦,使它们分别完成相应的功能:程序 3.1:统计参加比赛 ...

  4. c语言八皇后问题经典算法,经典算法之八皇后问题

    八皇后问题是一个古老而又著名的问题,是学习回溯算法的一个经典案例.今天我们就一起来探究一下吧! 时间退回到1848年,国际西洋棋棋手马克斯·贝瑟尔提出了这样的一个问题, 在8×8格的国际象棋上摆放八个 ...

  5. [C语言]八皇后问题回溯算法

    八皇后问题:在8×8格的国际象棋上摆放八个皇后,任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 将棋盘抽象为4 * 4到20 * 20大小的矩阵 输入样例: 请输入棋盘的大小(4 ...

  6. C语言编程统计八皇后问题的解的个数,八皇后问题C语言解法

    偶遇八皇后问题,随即自己写了一个仅供参考 #include #include #define SIZE 8 void Circumsribe(int(*checkerboard)[SIZE], int ...

  7. 走进C/C++函数的名字改编

    ​01.介绍 现在的编程语言中,不同的变量或函数可以用相同的标识符命名,只要它们占据不同的命名空间(通常由模块.类或作用域定义)或有不同的签名(如在函数重载中)时,就可能会出现标识符重名的情况.另外, ...

  8. 历年软件设计师下午考试试题汇总统计(更新至2016年上半年)

    本文对2006年5月至2016年5月[11年,21次]的软件设计师级别下午试题进行一个简单的汇总统计,希望对准备参加软考的朋友能有所帮助. 从2006年5月开始(尤其是从2010年5月开始),软件设计 ...

  9. impala的substr从第几位截到最后一位_冰雪奇缘2彩蛋:片名内含深意,艾莎是第13位公主象征着背叛...

    <冰雪奇缘2>自上映以来就几乎霸屏了国内外各大电影院的档期,甚至引起了韩国导演的集体抗议,这部时隔6年的优秀作品又再一次的带给观众们绝美的视听盛宴的同时也在不断的超越自己,喜爱迪士尼.喜爱 ...

最新文章

  1. python爬虫:Multipart/form-data POST文件上传详解
  2. gps数据转坐标c语言,GPS原始坐标转百度地图坐标(纯C代码)
  3. php url传递参数_互联网系统(APP、网站等)通信基石——会话(PHP版)
  4. 洛谷-小书童——密码-简单字符串
  5. Layui--颜色选择器layui.colorpicker
  6. 「解决方案」用户变电站配电监控解决方案
  7. 项目管理的五个过程和九大知识领域
  8. [洛谷P4118][Ynoi2016]炸脖龙I([洛谷P3934]Nephren Ruq Insania)
  9. 最大数[抽象排序之抽象规则]
  10. 免费在线生成二维码网站,支持二维码自定义
  11. ps4变更账号服务器,ps4怎么变更账户邮箱-ps4更改账户邮箱的方法
  12. 浙江江西公费出国游黑幕调查
  13. Cannot read property bindings of null 解决方法
  14. 惠普光影精灵2加装固态硬盘与内存后重装正版win10与office
  15. 【Linux】压缩与解压zip
  16. js中some和every用法
  17. PowerDesigner经验,sql文件生成pdm文件,并生成中文comment描述
  18. Nodejs进程崩溃发送邮件
  19. windows 新版skia编译 版本号m37_2062(2018.1.1)
  20. python线条加粗_python 加粗

热门文章

  1. Linux文件导出到Windows乱码的问题
  2. Jupyter的使用与安装
  3. [Flink]Flink的window介绍
  4. JDK(Install)
  5. 评《货币战争》:问苍茫大地谁主沉浮? 第一次转这样的帖子
  6. OracleSpatial函数实例
  7. MySQL CASE WHEN 根据一个表的字段值不同关联查询两张不同的表【子查询】
  8. PHP写webservice服务端
  9. @HTML.RadioButtonFor和@Html.DropDownList用法
  10. vmware使用已有linux系统的物理磁盘分区