描述

在 n×n 的国际象棋棋盘上放置n个皇后,使得任何一个皇后都无法直接吃掉其他的皇后任两个皇后都不能处于同一条横行、纵行或斜线上)

输入

输入有多组(直到-1结束)

每组一行 一个整数 n(0<n<11)代表皇后的个数。

输出

每组测试数据间输出一个换行。

对于每组数据,如果存在一个棋谱(使得n个皇后不会相互攻击),先输出这是第几种棋谱,然后输出该棋谱。当全部棋谱都输完时,最后输出该组总共摆放的棋谱数。

样例输入

1
2
4
-1

样例输出

case1:
1
There are 1 kinds of

There are 0 kinds of

case1:
0 1 0 0
0 0 0 1
1 0 0 0
0 0 1 0
case2:
0 0 1 0
1 0 0 0
0 0 0 1
0 1 0 0
There are 2 kinds of

提示

存放皇后时,按列优先的顺序从上往下从左至右的顺序遍历。

题意

在 n×n 的国际象棋棋盘上放置n个皇后,使得任何一个皇后都无法直接吃掉其他的皇后任两个皇后都不能处于同一条横行、纵行或斜线上),输出所有可能的棋盘,最后输出总数

题解

回溯,往前试探一步,判断是否可行,再试探

代码
 #include<stdio.h>
#include<string.h>
int n,k;
int pos[];//pos[i]=j表示第i行的皇后在第j列
int abs(int x){return x>?x:-x;}
bool st(int now)
{
for(int i=;i<now;i++)
if(pos[i]==pos[now]||abs(pos[i]-pos[now])==abs(i-now))//和前几个在同一列,在同一斜
return false;
return true;
}
void print()
{
printf("case%d:\n",++k);//k代表个数
for(int i=;i<n;i++)
{
if(pos[i]==)
printf("");
else
printf("");
for(int j=;j<n;j++)
{
if(pos[i]==j)
printf("");
else
printf("");
}
puts("");
}
}
void trail(int now)//递归回溯,now表示第几个试探
{
if(n==now)//填满n个结束
{
print();
return;
}
for(int j=;j<n;j++)
{
pos[now]=j;//先填上,试探
if(st(now))//可行就先选这个数
trail(now+);//试探下一个
}
}
int main(){
int o=;
while(scanf("%d",&n)!=EOF,n!=-)
{
if(o++)puts("");
memset(pos,,sizeof(pos));
k=;
trail();
printf("There are %d kinds of\n",k);
}
return ;
}

最新文章

  1. myeclipse自动补全增强
  2. js监听input是第几次click
  3. 22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表。然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法showB输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。
  4. sysbench 安装
  5. windows快捷操作
  6. 解析activity之间数据传递方法的详解
  7. SSH 概念及使用详解
  8. text bss data的区别
  9. 【PullToRefresh 系列基本用法】 Android装上拉下拉刷新控制具体的解释
  10. 在Netbeans上配置Android开发环境
  11. IE8下提示&#39;console&#39;未定义错误
  12. Cannot open the disk &#39;F:\centos64-final\CentOS 64-bit\CentOS 64-bit.vmdk&#39; orone of the snapshot disk
  13. An internal error occurred during: &quot;Launching New_configuration&quot;
  14. Jerry的UI5框架代码自学教程
  15. Truncated Power Method for Sparse Eigenvalue Problems
  16. Python推荐系统库--Surprise理论
  17. Windows10关闭自动更新
  18. 深入浅出TCP之半关闭与CLOSE_WAIT
  19. js判断客户端是否是IOS系统
  20. Error:Annotation processors must be explicitly declared now.

热门文章

  1. GitLab更新远程分支信息
  2. unity3d将C#打包成dll方法
  3. spark SQL概述
  4. HTML5之viewport使用
  5. Java集合入门
  6. collections模块---(namedtuple、deque、OrderdDict、defaultdict、Counter)和configparser模块
  7. js选择器 querySelector
  8. (15/24) 为webpack增加babel支持
  9. 28. 表单css样式定义格式
  10. 10 并发编程-(线程)-GIL全局解释器锁&amp;死锁与递归锁