N-Empress
全排列
基本思想:递归、散列
代码实现
#include<cstdio>
const int maxn = 11;
int n, P[maxn], hashTable[11] = {false};
void generateP(int index)
{
if(index == n+1) /*递归边界*/
{
for(int i = 1; i <= n; i++)
printf("%d ", P[i]);
printf("\n");
return ;
}
for(int x = 1; x <= n; x++)
{
if(hashTable[x] == false)
{
P[index] = x;
hashTable[x] = true;
generateP(index + 1); /*递归式*/
hashTable[x] = false; /*还原状态*/
}
}
}
int main()
{
n = 4;
generateP(1);
return 0;
}
N皇后问题
描述
在n*n的国际象棋棋盘上放置n个皇后,他们不能在同一行,同一列以及同一条对角线上。任意给出一个n,求合法方案数。
基本思想:全排列
每一列上的皇后的行号是n的全排列数,再检测对角线。
代码实现
基础递归
int count = 0;
void generateP(int index)
{
if(index == n + 1)
{
/*添加代码*/
bool flag = true;
for(int i = 1; i <= n; i++)
{
for(int j = i+1; j<= n; j++)
/*同对角线上*/
if(abs(i - j) == abs(P[i] - P[j]))
{flag = false; break;}
}
if(flag) count++;
return ;
}
for(int x = 1; x <= n; x++)
{
if(hashTable[x] == flase)
{
hashTable[x] = true;
P[index] = x;
generateP(index + 1);
hashTable[x] = false;
}
}
}
回溯递归
在递归之前先判断是否需要进行的递归
int count = 0;
void generateP(int index)
{
if(index == n+1)
{
count ++;
return ;
}
for(int x = 1; x <= n; x++)
{
if(hashTable[x] == false)
{
bool flag = true;
/*遍历之前皇后*/
for(int pre = 1; pre < index; pre++)
{
/*同对角线*/
if(abs(index - pre) == abs(x - P[pre]))
{flag = false; break; }
}
if(flag)
{
P[index] = x;
hashTable[x] = true;
generateP(index+1);
hashTable[x] = false;
}
}
}
}
N-Empress的更多相关文章
- PHP 5.6 编译安装选项说明
`configure' configures this package to adapt to many kinds of systems. Usage: ./configure [OPTION].. ...
- centos 7.0 编译安装php 7.0.3
php下载页面 http://cn2.php.net/downloads.php 7.0.3多地区下载页面 http://cn2.php.net/get/php-7.0.3.tar.gz/from/a ...
- PHP是什么
php 是一种服务器端的,嵌入html的脚本语言.php区别其他像客户端java的地方是它的代码在服务器端执行.php能做什么? 最低水平,php可以做任何其他cgi程序所能做的事,例如收集表格数据, ...
- php5.3 fastcgi方式 安装以及和nginx整合
注意:不要随便改变基础库的版本,否则会对别的软件产生编译错误 1.基础依赖包安装: cd /software/zlib- ./configure make make install cd /softw ...
- centos 7.0 PHP 5.6.5 安装过程 (php+nginx)
php网址 http://php.net/downloads.php 首先下载 php-5.6.5.tar.gz [root@localhost src]# wget http://cn2.php.n ...
- Nginx 1.10.2 php 7 环境安装
1.安装编译工具和库文件,红色部分提示在centos镜像站点上查不到包,用yum安装的时候要认真看那些包没有找到,用yum的时候尽量不要使用-y选项 yum install gcc automake ...
- UVALive 7261 Xiongnu's Land (扫描线)
Wei Qing (died 106 BC) was a military general of the Western Han dynasty whose campaigns against the ...
- HDU 2665 && POJ 2104(主席树)
http://poj.org/problem?id=2104 对权值进行建树(这个时候树的叶子是数组b的有序数列),然后二分查找原数列中每个数在有序数列中的位置(即第几小),对每一个前缀[1,i]建一 ...
- TAROT.
/* * * */ #include<stdio.h> #include<stdlib.h> #include<time.h> int main() { int t ...
- php中高级基础知识点
1. 基本知识点 HTTP协议中几个状态码的含义:1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 100 (继续) 请求者应当继续提出请求. 服务器返回此代码 ...
随机推荐
- 商业爬虫学习笔记day3
一. 付费代理发送请求的两种方式 第一种方式: (1)代理ip,形式如下: money_proxy = {"http":"username:pwd@192.168.12. ...
- git 日志技术
1.git log, 在一个分支下, 以时间的倒序方式显示你制造的所有commit列表,包含创建人,时间,提交了什么等信息: 2. git reflog, 获取您在本地repo上还原commit所做工 ...
- 队列——Java实现
1 package struct; 2 3 interface IQueue{ 4 //入队列 5 void add(Object obj); 6 //出队列 7 Object remove(); 8 ...
- react-native安卓运行报错:The number of method references in a .dex file cannot exceed 64K.
错误原因:App里面方法数超过64K解决方法:在android/app/build.gradle中添加implementation 'com.android.support:multidex:1.0. ...
- 【Linux卷管理】LVM原理
LVM 简介 每个Linux使用者在安装Linux时 都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能 ...
- angular过滤器在html和js中的使用
在HTML中使用格式为:{{数据 | 过滤器名称:条件一:条件二--}}:过滤条件间使用:隔开 例如: 在代码中一般格式为: 变量 = $filter("过滤器名称")(被过滤数 ...
- java 整型
byte(1字节).short(2字节).int(4字节).long(16字节) java中前缀加上0b或者0B就可以写二进制数,前缀加上0就可以写八进制数,前缀加上0x或者0X就可以写十六进制数 一 ...
- 基于Web的质量和测试度量指标
直观了解软件质量和测试的完整性 VectorCAST/Analytics可提供便于用户理解的web仪表盘视图来显示软件代码质量和测试完整性指标,让用户能够掌握单个代码库的趋势,或对比多个代码库的度量指 ...
- MySQL如何把varchar类型字段转换成int类型进行倒叙排序
SELECT * FROM sheet2 t1 WHERE t1.`金额`+'0' ORDER BY t1.`金额` DESC;
- CF1076B Divisor Subtraction 题解
Content 给定一个数 \(n\),执行如下操作: 如果 \(n=0\) 结束操作. 找到 \(n\) 的最小质因子 \(d\). \(n\leftarrow n-d\) 并跳到操作 \(1\). ...