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