描述

在 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 ;
}

TZOJ 4435 n皇后问题(回溯)的更多相关文章

  1. 八皇后问题-回溯法(MATLAB)

    原创文章,转载请注明:八皇后问题-回溯法(MATLAB) By Lucio.Yang 1.问题描述 八皇后问题是十九世纪著名数学家高斯于1850年提出的.问题是:在8*8的棋盘上摆放8个皇后,使其不能 ...

  2. 八皇后,回溯与递归(Python实现)

    八皇后问题是十九世纪著名的数学家高斯1850年提出 .以下为python语句的八皇后代码,摘自<Python基础教程>,代码相对于其他语言,来得短小且一次性可以打印出92种结果.同时可以扩 ...

  3. N皇后问题--回溯法

    1.引子 中国有一句古话,叫做“不撞南墙不回头",生动的说明了一个人的固执,有点贬义,但是在软件编程中,这种思路确是一种解决问题最简单的算法,它通过一种类似于蛮干的思路,一步一步地往前走,每 ...

  4. HDU 2553 n皇后问题(回溯法)

     DFS Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description ...

  5. [HDU 2553]--N皇后问题(回溯)/N皇后问题的分析

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2553 N皇后问题 Time Limit: 2000/1000 MS (Java/Others)     ...

  6. noj算法 8皇后打印 回溯法

    描述: 输出8皇后问题所有结果. 输入: 没有输入. 输出: 每个结果第一行是No n:的形式,n表示输出的是第几个结果:下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格.不同的结果中,先输出第 ...

  7. HDU 2553 N皇后问题(回溯 + 剪枝)

    本文链接:http://i.cnblogs.com/EditPosts.aspx?postid=5398797 题意: 在N*N(N <= 10)的方格棋盘放置了N个皇后,使得它们不相互攻击(即 ...

  8. 算法入门经典-第七章 例题7-4-1 拓展 n皇后问题 回溯法

    实际上回溯法有暴力破解的意思在里面,解决一个问题,一路走到底,路无法通,返回寻找另   一条路. 回溯法可以解决很多的问题,如:N皇后问题和迷宫问题. 一.概念 回溯算法实际类似枚举的搜索尝试过程,主 ...

  9. N皇后问题 回溯非递归算法 C++实现2

    运行结果 代码如下 #include <bits/stdc++.h> using namespace std; ; const char *LINE32 = "--------- ...

随机推荐

  1. restclient 访问 springmvc java工程接口

    一.tomcat和nginx 配置 /etc/nginx/conf.d/default.conf location /nsx{ proxy_pass http://nsx; proxy_connect ...

  2. 1036 Boys vs Girls (25 分)

    1036 Boys vs Girls (25 分) This time you are asked to tell the difference between the lowest grade of ...

  3. RNN总结

    RNN既可以表述为循环神 经网络(recurrent neural network),也可以表述为递归神经网络(recursive neural network),前者一般用于处理以时间序列为输入的问 ...

  4. 关闭浏览器时的友情提醒jQuery写法

    $(window).bind('beforeunload', function () { return '您确定退出该页面吗?'; }); 支持以下浏览器(对号表示支持,叉号表示不支持.):

  5. Fork/Join编程模型

    1.一种并行计算的多线程编程模型 2.开始--任务分割--多线程异步执行---任务合并--阻塞等待合并结果.(分治算法) 3.work-stealing算法: 每个线程维护一个各自的双端的链表,有新任 ...

  6. CSS Web安全字体组合

    常用的字体组合 font-family属性是多种字体的名称,作为一个"应变"制度,以确保浏览器/操作系统之间的最大兼容性.如果浏览器不支持的第一个字体,它尝试下一个的字体. 你想要 ...

  7. python的XML处理模块ElementTree

    ElementTree是python的XML处理模块,它提供了一个轻量级的对象模型.它在Python2.5以后成为Python标准库的一部分,但是Python2.4之前需要单独安装.在使用Elemen ...

  8. 小朋友学Python(1):Python简介与编程环境搭建

    一.Python简介 不死Java,不朽C/C++,新贵Python. Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰 ...

  9. Redis如何存储对象与集合示例详解

      前言 大家都知道在项目中,缓存以及mq消息队列可以说是不可或缺的2个重要技术.前者主要是为了减轻数据库压力,大幅度提升性能.后者主要是为了提高用户的体验度,我理解的是再后端做的一个ajax请求(异 ...

  10. Angular5 UI post 请求 输出 文件下载

    this.httpClient.post(url1, JSON.parse(data1) , {responseType: 'blob'}).subscribe(data => { const ...