八皇后问题(DFS)
题目描述:
要在国际象棋棋盘中放八个皇后,使任意两个皇后都不能互相吃,皇后能吃同一行、同一列,同一对角线上(两个方向的对角线)的任意棋子。现在给一个整数n(n<=92),输出前n种的摆法。

输入格式:
输入一个整数n。
输出格式:
输出共n行。
每行8个数,表示每行所放的列号,每个数输出占4列。
样例输入:
3
样例输出:
1 5 8 6 3 7 2 4
1 6 8 3 7 4 2 5
1 7 4 6 8 2 5 3 思路:DFS,把每一个格子试一次。 提示: 确定两个棋子在不在统同一行,同一列,同一对角线的方法: 如下图,如果两个棋子在同一行,则i1=i2; 如果两个棋子在同一行列,则j1=j2; 如果两个棋子在同对角线,则i1+j1=i2+j2;

不多说了,上代码:
#include<bits/stdc++.h>
using namespace std;
int a[],b[],c[],d[],n,sum,m;//a[9],b[9],直线, c[17],d[17],对角线
void print(){
for(int i=;i<=n;i++)printf("%4d",d[i]);
cout<<endl;
}
void search(int row){//DFS
if(row>n){//如果放满了就打印(print函数)
sum++;
if(sum<=m)print();
return;//返回
}
for(int i=;i<=n;i++){
if(a[i]== && b[row+i]== && c[row-i+]==){
a[i]=;
b[row+i]=;
c[row-i+]=;//放棋子
d[row]=i;//记录
search(row+);//递归
a[i]=;
b[row+i]=;
c[row-i+]=;//恢复
}
}
}
int main(){
n=;//八皇后,故n=8
cin>>m;
search();
return ;
}
八皇后问题(DFS)的更多相关文章
- 八皇后(dfs+回溯)
重看了一下刘汝佳的白板书,上次写八皇后时并不是很懂,再写一次: 方法1:逐行放置皇后,然后递归: 代码: #include <bits/stdc++.h> #define MAXN 8 # ...
- 八皇后问题-dfs
一.题意解析 国际象棋中的皇后,可以横向.纵向.斜向移动.如何在一个8X8的棋盘上放置8个皇后,使得任意两个皇后都不在同一条横线.竖线.斜线方向上?八皇后问题是一个古老的问题,于1848年由一位国际象 ...
- 八皇后问题 dfs/递归
#include <bits/stdc++.h> using namespace std; const int maxn = 55; int ans=0; int vis_Q[maxn]; ...
- 洛谷P1219 :八皇后(DFS+回溯)
题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...
- 洛谷P1219 八皇后【dfs】
题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...
- 洛谷 P1219 八皇后【经典DFS,温习搜索】
P1219 八皇后 题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序 ...
- 八皇后问题解题报告(dfs
这里是代码传送门 所谓八皇后问题,一开始接触,上学期舍友提及的,但是因为各种原因,水平不够,并没有关心,偶然之间,再次遇见,便进行的尝试(棋盘是0-7的,不是1-8的...开始打弄错了) 所谓八皇后问 ...
- 用dfs求解八皇后问题
相信大家都已经很熟悉八皇后问题了,就是指:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法.主要思路:按行进行深度优先搜索,在该 ...
- kb-01-a<简单搜索--dfs八皇后问题变种>
题目描述: 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的 ...
随机推荐
- $(function(){})返回值$(document)
$(function(){})返回值为$(document). 做出下面的操作:可以使得页面背景改变. $(function (){}).find('body').css('background',' ...
- require--按需加载js与模块化
1.html中: “<script type="text/javascript" src="js/require.js" data-main=" ...
- GYM 101933K(二项式反演、排列组合)
方法一 设\(f_i\)为最多使用\(i\)种颜色的涂色方案,\(g_i\)为恰好只使用\(i\)种颜色的涂色方案.可知此题答案为\(g_k\). 根据排列组合的知识不难得到\(f_k = \sum_ ...
- 实例/静态工厂方法得到bean
<bean id="a" class="com.yundaex.wms.config.TestBeanChild" /> <bean id=& ...
- 定时任务crontab 详解
cron 是一个可以用来根据时间.日期.月份.星期的组合来调度对重复任务的执行的守护进程. cron 假定系统持续运行.如果当某任务被调度时系统不在运行,该任务就不会被执行. 要使用 cron 服务, ...
- 网页抓取解析,使用JQuery选择器进行网页解析
最近开发一个小功能,数据库中一个基础表的数据从另一个网站采集. 因为网站的数据不定时更新,需要更新后自动采集最新的内容. 怎么判断更新数据没有? 好在网站有一个更新日志提示的地方,只需要对比本地保留的 ...
- T-SQL多个小计+合计,分类汇总
select then '合计' else cast(姓名 as varchar) end 姓名, then '姓名小计' else cast(学期 as varchar) end 学期, case ...
- MVC 路由URL重写
在现今搜索引擎制霸天下的时代,我们不得不做一些东西来讨好爬虫,进而提示网站的排名来博得一个看得过去的流量. URL重写与优化就是搜索引擎优化的手段之一. 假如某手机网站(基于ASP.NET MVC)分 ...
- AJPFX辨析continue与break的区别
1.break : (1).结束当前整个循环,执行当前循环下边的语句.忽略循环体中任何其它语句和循环条件测试.(2).只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用br ...
- Access denied for user ''@'localhost' (using password: NO)之idea坑~
idea启动sql连接远程数据库时发生错误: 发现是sql连接配置问题: spring: datasource: data-username: root data-password: 123456 u ...