全排列

基本思想:递归、散列

代码实现

#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的更多相关文章

  1. PHP 5.6 编译安装选项说明

    `configure' configures this package to adapt to many kinds of systems. Usage: ./configure [OPTION].. ...

  2. 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 ...

  3. PHP是什么

    php 是一种服务器端的,嵌入html的脚本语言.php区别其他像客户端java的地方是它的代码在服务器端执行.php能做什么? 最低水平,php可以做任何其他cgi程序所能做的事,例如收集表格数据, ...

  4. php5.3 fastcgi方式 安装以及和nginx整合

    注意:不要随便改变基础库的版本,否则会对别的软件产生编译错误 1.基础依赖包安装: cd /software/zlib- ./configure make make install cd /softw ...

  5. 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 ...

  6. Nginx 1.10.2 php 7 环境安装

    1.安装编译工具和库文件,红色部分提示在centos镜像站点上查不到包,用yum安装的时候要认真看那些包没有找到,用yum的时候尽量不要使用-y选项 yum install gcc automake ...

  7. UVALive 7261 Xiongnu's Land (扫描线)

    Wei Qing (died 106 BC) was a military general of the Western Han dynasty whose campaigns against the ...

  8. HDU 2665 && POJ 2104(主席树)

    http://poj.org/problem?id=2104 对权值进行建树(这个时候树的叶子是数组b的有序数列),然后二分查找原数列中每个数在有序数列中的位置(即第几小),对每一个前缀[1,i]建一 ...

  9. TAROT.

    /* * * */ #include<stdio.h> #include<stdlib.h> #include<time.h> int main() { int t ...

  10. php中高级基础知识点

    1. 基本知识点 HTTP协议中几个状态码的含义:1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码   说明 100   (继续) 请求者应当继续提出请求. 服务器返回此代码 ...

随机推荐

  1. 商业爬虫学习笔记day3

    一. 付费代理发送请求的两种方式 第一种方式: (1)代理ip,形式如下: money_proxy = {"http":"username:pwd@192.168.12. ...

  2. git 日志技术

    1.git log, 在一个分支下, 以时间的倒序方式显示你制造的所有commit列表,包含创建人,时间,提交了什么等信息: 2. git reflog, 获取您在本地repo上还原commit所做工 ...

  3. 队列——Java实现

    1 package struct; 2 3 interface IQueue{ 4 //入队列 5 void add(Object obj); 6 //出队列 7 Object remove(); 8 ...

  4. 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. ...

  5. 【Linux卷管理】LVM原理

    LVM 简介 每个Linux使用者在安装Linux时 都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能 ...

  6. angular过滤器在html和js中的使用

    在HTML中使用格式为:{{数据 | 过滤器名称:条件一:条件二--}}:过滤条件间使用:隔开 例如: 在代码中一般格式为:  变量 = $filter("过滤器名称")(被过滤数 ...

  7. java 整型

    byte(1字节).short(2字节).int(4字节).long(16字节) java中前缀加上0b或者0B就可以写二进制数,前缀加上0就可以写八进制数,前缀加上0x或者0X就可以写十六进制数 一 ...

  8. 基于Web的质量和测试度量指标

    直观了解软件质量和测试的完整性 VectorCAST/Analytics可提供便于用户理解的web仪表盘视图来显示软件代码质量和测试完整性指标,让用户能够掌握单个代码库的趋势,或对比多个代码库的度量指 ...

  9. MySQL如何把varchar类型字段转换成int类型进行倒叙排序

    SELECT * FROM sheet2 t1 WHERE t1.`金额`+'0' ORDER BY t1.`金额` DESC;

  10. CF1076B Divisor Subtraction 题解

    Content 给定一个数 \(n\),执行如下操作: 如果 \(n=0\) 结束操作. 找到 \(n\) 的最小质因子 \(d\). \(n\leftarrow n-d\) 并跳到操作 \(1\). ...