八皇后(例题:洛谷P1219)
说到八皇后,大一时弄得似懂非懂的,今天刷题刚好碰到类似的,于是誓要把它搞明白,写博客以记之~
搞懂八皇后问题,对dfs,递归,打标记等知识的理解有很大的帮助。
这是:例题链接 (点它点它点它)
注释写得很明白了嘻嘻嘻
#include <iostream>
#include <cmath>
using namespace std;
int n, ans, book[15], a[15], b[15];void dfs(int hang){ //hang==1 表示从第一行开始 if(hang>n){ //大于棋盘的行数,递归终止 ans++;if(ans <= 3){printf("%d", b[1]);for(int i = 2; i <= n; i++){printf(" %d", b[i]);}printf("\n");}return; //及时退出 }for(int lie = 1; lie <= n; lie++){ //lie表示列 if(book[lie]==0){ //book[lie]==0 表示这一列目前没有任何皇后,保证列数不会重复 bool ok = true;for(int pre = 1; pre < hang; pre++){ //试着放置皇后,看是否满足对角线不重复 if(abs(hang-pre)==abs(lie-b[pre])){ok = false;break;}} if(ok){ //ok==true 表示对角线不重复,即可以把皇后放置在此处 book[lie] = 1; //此列以占用 b[hang] = lie; //该皇后的坐标是(hang, lie) dfs(hang+1); //保证行数不会重复,找下一行的皇后 book[lie] = 0; //重点:回溯,清除这一行的占用,找其他的组合 }}}
}int main()
{scanf("%d", &n);dfs(1); printf("%d", ans);
}
加油8!!!
“Don’t be too hard on yourself about like ‘How does my decision today, affect me in 5 years from now?!’ There’s a difference between being excited for a challenge, and becoming absorbed in anxiety that’s borrowed from the future. Don’t miss it. Live in the moment.”
“不要对自己过于苛刻,比如纠结于“我今天做的决定会不会影响五年后的自己” ,对挑战感到兴奋和因为未来的不确定而感到焦虑是不一样的。不要错过此刻的精彩,活在当下。”
——Taylor Swift 2019.11.11语
八皇后(例题:洛谷P1219)相关推荐
- 深度优先搜索——八皇后问题(洛谷 P1219)
题目选自洛谷P1219 该题针对6-13皇后都行,只需改动输入的数字. 八皇后问题是经典的DFS问题,唯一需要注意的就是判断能够放置的条件,即满足什么状况是对的. 题目要求不能在同一行,同一列 ...
- 八皇后(洛谷-P1219)
题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...
- 洛谷P1219 [USACO1.5]八皇后 Checker Challenge(C语言)
洛谷P1219 [USACO1.5]八皇后 Checker Challenge 题目 代码 这个八皇后问题也是经典入门深搜的题目了呀,理论上深搜都可以运用数据结构的栈来模拟计算机内部的压栈操作.但这里 ...
- 洛谷 P1219 八皇后
P1219 八皇后 题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序 ...
- 洛谷 P1219 ---- 八皇后
题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...
- 洛谷——P1219 八皇后
题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...
- 洛谷 P1219 八皇后题解
题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...
- 洛谷 P1219八皇后
题目: 题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子.上面的布局可以用序列2 4 6 ...
- 图解Topo拓扑排序 例题洛谷P4017 最大食物链计数
适用条件:无环图 输出结果:使得每个节点,以它为终点的起点节点排都在其前面 作用:递推保证前面的节点都已经被使用过 实现方法:从没有入边的节点开始,输出并从其他节点中删去自己,重复此步骤直到所有节点都 ...
最新文章
- 洛谷 P1064 金明的预算方案
- 使用log4jdbc记录SQL信息
- java8 lambda判断_Java8新特性-Lambda表达式
- Java命令行界面(第25部分):JCommando
- mysql中用来取余数的函数是_MySQL常用函数-单行处理函数-字符串处理函数(更新中...)...
- 你的消息队列如何保证消息不丢失,且只被消费一次,这篇就教会你
- 零基础 Amazon Web Services (AWS) 入门教程 (列表)
- spring所需包下载
- etherlime-3-Etherlime Library API-Deployed Contract Wrapper
- RuntimeError: Exporting the operator uniform to ONNX opset version 12 is not supported.
- Python 正则表达式的$美元符号
- Cisco Packet Tracer路由器的基本命令
- 服务器安全-避免被攻击者查到服务器源 IP与对攻击者ID信息收集
- 百分比收益率和对数收益率
- 微信小程序调用支付接口支付(tp5、小程序)
- linux下执行.sh文件的方法和语法
- 初等行变换、初等列变换
- 操作系统真象还原第七章
- 数学诺贝尔奖2008阿贝尔奖揭晓
- MobileNet v1 和 v2