描述

在 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. red hat官方的rhel操作系统版本号与内核版本号的对应关系

    原文在如下网址:https://access.redhat.com/articles/3078 The tables below list the major and minor Red Hat En ...

  2. 如何缓解DDOS攻击

    1.减少攻击面 (a) reduce the number of necessary Internet entry points,(b) eliminate non-critical Internet ...

  3. springBoot----@ConditionalOnxxx相关注解总结

      下面来介绍如何使用@Condition public class TestCondition implements Condition { /** * 只有返回true,才会启用配置 */ pub ...

  4. [Python] 分段线性插值

    利用线性函数做插值 每一段的线性函数: #Program 0.6 Linear Interploation import numpy as np import matplotlib.pyplot as ...

  5. 2017-2018-2 20165233 实验三 敏捷开发与XP实践

    20165233 实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验步骤 一.编码标准 编程标准包含:具有说明性的名字.清晰的表达式.直截了当的控制流.可读的代码和注释,以及 ...

  6. UVA-839-二叉树-一个有意思的题目

    题意: 一颗二叉树可以看成一个杠杆,左右俩边有重量,有到支点长度,判断整个树是否平衡(根据杠杆原理),如果当前结点有左孩子,那么当前左边的重量就是左孩子的总和,右边同理 递归,发现scanf和cin的 ...

  7. jdk1,8 HashMap

    Java源码分析:HashMap 1.8 相对于1.7 到底更新了什么? 上面网站总结很详细  源码除了具体操作其余全罗列.这里就不总结了

  8. (19/24) webpack实战技巧:推荐使用的第三方类库打包方法

    在日常的开发中,总避免不了引入第三方的框架,比如常用的JQuery,此节我们来学习一下如何优雅并正确的用webpack引入第三方库. 这里我们以第三方框架JQuery为例: 1.在入口文件中引入 1. ...

  9. jQuery ajax - serializeArray() 方法

    定义和用法 serializeArray() 方法通过序列化表单值来创建对象数组(名称和值). 您可以选择一个或多个表单元素(比如 input 及/或 textarea),或者 form 元素本身. ...

  10. 34. Studio字符串分割split用法

    var v = "1,2,3"; var arr = v.toString().split(","); 备注:最好先toString()转为字符串,不然有些情况 ...