在国际象棋中,皇后是最厉害的棋子,可以横走、直走,还可以斜走。棋手马克斯·贝瑟尔 1848 年提出著名的八皇后问题:即在 8 × 8 的棋盘上摆放八个皇后,使其不能互相攻击 —— 即任意两个皇后都不能处于同一行、同一列或同一条斜线上。例如:
题图.jpg

现在我们把棋盘扩展到 n×n 的棋盘上摆放 n 个皇后,请问该怎么摆?

请编写程序,输入正整数 n,输出全部摆法(棋盘格子空白处显示句点“.”,皇后处显示字母“Q”,每两个字符之间空一格)。
输入格式

正整数 n(n>0)

输出格式

若问题有解,则输出全部摆法(每两种摆法之间空一行)。
若问题无解,则输出 None。

要求:试探的顺序按从上到下逐行进行,其中每一行按从左到右的逐格进行,请参看输出样例2。
输入样例1

3

输出样例1

None

输入样例2

6

输出样例2

. Q . . . .
. . . Q . .
. . . . . Q
Q . . . . .
. . Q . . .
. . . . Q .. . Q . . .
. . . . . Q
. Q . . . .
. . . . Q .
Q . . . . .
. . . Q . .. . . Q . .
Q . . . . .
. . . . Q .
. Q . . . .
. . . . . Q
. . Q . . .. . . . Q .
. . Q . . .
Q . . . . .
. . . . . Q
. . . Q . .
. Q . . . .

这道题我直接在ACM模板代码上略作修改后提交的,需要留意的是回车问题,最后一行是不能输出回车的,切记切记

//
// Created by TIGA_HUANG on 2020/10/5.
//// n皇后问题:优化的回溯法
#include <bits/stdc++.h>const int maxn = 100 + 10;
using namespace std;int sum, n, cnt;
int C[maxn];
bool vis[3][maxn];
int Map[maxn][maxn];//打印解的数组//一般在回溯法中修改了辅助的全局变量,一定要及时把他们恢复原状
void Search(int cur)   //逐行放置皇后
{cnt++;if (cur == n) {sum++;if (sum > 1)cout << '\n';for (int i = 0; i < cur; i++)Map[i][C[i]] = 1;//打印解for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (Map[i][j]) {cout << "Q";} elsecout << ".";if (j != n - 1) {cout << ' ';} else {cout << '\n';}}}memset(Map, 0, sizeof(Map)); //还原} elsefor (int i = 0; i < n; i++)  //尝试在 cur行的 各 列 放置皇后{if (!vis[0][i] && !vis[1][cur + i] && !vis[2][cur - i + n]) //判断当前尝试的皇后的列、主对角线{vis[0][i] = vis[1][cur + i] = vis[2][cur - i + n] = true;C[cur] = i;//cur 行的列是 iSearch(cur + 1);vis[0][i] = vis[1][cur + i] = vis[2][cur - i + n] = false;//切记!一定要改回来}}
}int main() {scanf("%d", &n);memset(vis, false, sizeof(vis));memset(Map, 0, sizeof(Map));sum = cnt = 0;Search(0);if (!sum) {cout << "None\n";}
//    printf("%d %d\n",sum,cnt);//输出 解决方案 和 递归次数return 0;
}

八皇后问题 (25分)相关推荐

  1. 题目---汉诺塔及AI代码及八皇后

    2019春第十一周作业 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering ...

  2. 八皇后问题和八数码问题的最陡上升爬山法、首选爬山法、随机重启爬山法、模拟退火算法的分析和实现

    对经典算法的问题的回顾与感想 对八皇后问题和八数码问题分别用最陡上升爬山法.首选爬山法.随机重启爬山法.模拟退火算法来实现,并且分析他们的性能. 分析 要求实现的各个算法是有共同点的,比如,八皇后问题 ...

  3. 遗传算法求解八皇后问题C++实现

    一. 实验问题简介 问题表述为:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 本次实验利用遗传算法求解八皇后问题的一个可行 ...

  4. 递归设计--八皇后+神奇的口袋+数列+吃糖果

    2019.01.26 是日晴朗,纪念下放假以来第一次9点起,最近怎么越活越回去呢,别再患得患失啦,过好当下就行哟~ 本文主要是递归设计练习的总结,包含以下内容(难度依次递减) 八皇后(N皇后):全排列 ...

  5. 漫画:什么是八皇后问题?

    本文经授权转载自公众号程序员小灰 (ID:chengxuyuanxiaohui) -----  第二天  ----- 题目是什么意思呢? 国际象棋中的皇后,可以横向.纵向.斜向移动.如何在一个8X8的 ...

  6. Scheme来实现八皇后问题(2)

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址http://www.cnblogs.com/Colin-Cai/p/9790466.html 作者:窗户QQ/ ...

  7. python遗传算法八皇后_遗传算法之:八皇后问题

    八皇后问题: 在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法.正确的解有很多个,遗传算法并不直接计算一共有多少个解,而是寻找满 ...

  8. P1219 八皇后 含优化 1/5

    题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...

  9. [OpenJudge] 百练2754 八皇后

    八皇后 Description 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题. ...

  10. 如何用 C++ 在 10 行内写出八皇后?

    bhuztez ,正在找工作 ... 韦易笑. RednaxelaFX. 小白菜. 钢盅郭子 等 517 人赞同 既然有人邀请我了,我就来了,解法参考 如何简化求解八妃问题的代码? - 知乎用户的回答 ...

最新文章

  1. centos升级mysql到5.5
  2. VMware Workstation提示:另一个程序已锁定文件的一部分,进程无法访问,删除.lck文件夹和文件
  3. c++ python opencv_从C++到Python的OpenCV垫
  4. Java List添加元素
  5. java实现梁友栋裁剪算法_梁友栋裁剪算法
  6. python是干什么用的-python中upper是做什么用的
  7. 成功从小公司跳槽!java并发编程实践pdf完整百度云
  8. 医院信息化建设少不了CRM呼叫中心
  9. LaTex,Mardown和TeXmacs:如何选择写作的正确姿势
  10. 传智播客风清扬视频-------线程简介2
  11. cistern java,basin是什么意思_basin怎么读_basin翻译_用法_发音_词组_同反义词_盆-新东方在线英语词典...
  12. 我与鸟哥 Yar 的亲密接触
  13. python 调用另一个python文件
  14. 加密与解密 入侵检测 扫描与抓包
  15. 1核2G3M,系统盘40G,流量500G/月,83一年
  16. AndroidCamera学习笔记一 硬件
  17. 闲鱼商品详情抓取系统开发/测试完毕,可自动采集闲鱼商品详情信息
  18. 工作心路历程系列1:华为校招面试+实习经历+工作经历
  19. 鸿蒙os系统测试版照片,鸿蒙OS正式发布:荣耀智慧屏首发,一起来体验鸿蒙OS吧...
  20. python 抓取google play 各搜索词排名

热门文章

  1. 黑色星期五 问题描述   有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又
  2. GNN IS A COUNTER REVISITING GNN FOR QUESTION ANSWERING
  3. SCI论文全攻略之构思与撰文(二)
  4. Java常用类详细讲解
  5. 如何向下属布置工作任务,5个步骤,布置工作任务更清晰
  6. 学习《医学三字经白话解》之心腹痛、胸痹
  7. 如何用计算机排版打表格,PPT怎么利用表格来进行排版
  8. Windows Server 无法启用 网络发现
  9. 杭电ACM-LCY算法进阶培训班-专题训练(Hash及其应用)
  10. 比较指令-汇编码分析