/*
题目:
N皇后的问题。
*/
/*
思路:
全排列。
声明一个具有N个元素的数组curr,每个下标i(0>i>n)代表行,每个curr[i]代表列,所以初始化为curr[i] = i。
此时,各皇后既不在一行也不在一列,只需解决对角线的问题。
当|i-j|==|curr[i]-curr[j]|时,两个皇后处于一个对角线上。
*/
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<set>
#include<vector> using namespace std; bool isTrue(int* curr,int len){
for(int i = 0; i < len; i++){
for(int j = i+1; j < len; j++){
if(abs(curr[i] - curr[j]) == j - i ){
return false;
}
}
}
return true;
}
void isExist(int* curr,int len,int index,vector<vector<string>> &res){
if(index == len){
if(isTrue(curr,len)){
vector<string> ans;
//cout<<"["<<endl; for(int i = 0; i < len; i++){
string row = "";
for(int j = 0; j < len; j++){
row.append(".");
} row[curr[i]] = 'Q';
//cout<<row<<","<<endl;
ans.push_back(row); }
//cout<<"]"<<endl;
res.push_back(ans);
return;
}
}
for(int i = index; i < len; i++){
int temp = curr[index];
curr[index] = curr[i];
curr[i] = temp; isExist(curr,len,index+1,res); temp = curr[index];
curr[index] = curr[i];
curr[i] = temp; }
}
vector<vector<string>> solveNQueens(int n) {
int curr[n];
vector<vector<string>> res;
for(int i = 0; i < n; i++){
curr[i] = i;
}
isExist(curr,n,0,res);
return res;
} int main(){
vector<vector<string>> a= solveNQueens(1); for(int i = 0; i < a.size(); i++){
for(int j = 0; j < a[i].size(); j++){
cout<<a[i][j]<<endl;
}
} }

  

剑指offer-拓展训练-N皇后的问题-全排列的更多相关文章

  1. 【剑指offer】八皇后问题

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26614999 剑指offer上解决八皇后问题,没实用传统的递归或非递归回溯法,而是用了非常 ...

  2. 高强度学习训练第九天总结:5道剑指offer的题目

    实在不想看JVM了.刷几道剑指Offer的题,今天就水一水吧,脑子迷糊. 1.二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增 ...

  3. 【读书笔记】剑指offer

    导语 所有的编程练习都在牛客网OJ提交,链接: https://www.nowcoder.com/ta/coding-interviews 九章算法的 lintcode 也有这本书的题目.https: ...

  4. 剑指 Offer 题目汇总索引

    剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格              ...

  5. 剑指offer得意之作——顺时针打印矩阵

    题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3 ...

  6. 剑指Offer——回溯算法

    剑指Offer--回溯算法 什么是回溯法 回溯法实际是穷举算法,按问题某种变化趋势穷举下去,如某状态的变化用完还没有得到最优解,则返回上一种状态继续穷举.回溯法有"通用的解题法"之 ...

  7. 【Java】 剑指offer(1) 找出数组中重复的数字

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字 ...

  8. 【Java】 剑指offer(2) 不修改数组找出重复的数字

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在一个长度为n+1的数组里的所有数字都在1到n的范围内,所以数组中至少 ...

  9. 【Java】 剑指offer(9) 斐波那契数列及青蛙跳台阶问题

     本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项 ...

随机推荐

  1. SpringBoot性能优化之HikariCP连接池

    以前一直使用阿里Druid数据库连接池,这段时间听说有个号称速度最快.代码最简的后起之秀——HikariCP,于是动手实践一下 1.依赖如下: <?xml version="1.0&q ...

  2. HDU_5692_dfs序+线段树

    http://acm.hdu.edu.cn/showproblem.php?pid=5692 这道题真的是看了题解还搞了一天,把每条路径后序遍历按1-n重新标号,储存每个点在哪些路径中出现过(l和r数 ...

  3. mongodb 配置文件解释(转)

    Mongodb 3.x配置说明,本文内容忽略了Enterprise版和一些不常用的配置. 一.配置说明 在Mongod安装包中,包含2个进程启动文件:mongod和mongos:其中mongd是核心基 ...

  4. php 上传文件 示例

    <?php header("content-type:text/html;charset=utf-8"); error_reporting(E_ALL); //session ...

  5. Java TreeMap使用方法

    1.使用默认的TreeMap 构造函数,其中key值需要有比较规则. 2.使用默认的TreeMap 构造函数,Key中添加自定义类型,自定义类型必须继承Comparator. 3.使用比较器类来来实现 ...

  6. lwip nd没有实现ra,contik有参考

    lwip中关于nd的实现,没有路由器的功能,不能发送ra 在contiki中发现有nd发送ra的实现, contiki/core/net/ipv6/uip-ds6.c 在rs的接收处理中,发送soll ...

  7. k8s系列---基于canal的网络策略

    文章拷自:http://blog.itpub.net/28916011/viewspace-2215383/ 加上自己遇到的问题简单记录 安装文档:https://docs.projectcalico ...

  8. Django使用 djcelery时报ImportError: No module named south.db错误

    这时候可能是安装的Django-celery.celery的版本过低引起的,可以到pycharm查看推荐的版本,把版本更换到的推荐的版本就解决了

  9. struts2动态调用+Servlet过滤器+struts2拦截器

    周末真的是懒到心慌...... 本文是在完整s2sh项目基础上添加的,不太了解s2sh项目构建的朋友可以先参考一下这几篇文章: eclipse环境下基于tomcat-7.0.82构建struts2项目 ...

  10. 仅需60秒,使用k3s创建一个多节点K8S集群!

    作者: Dawid Ziolkowski丨Container Solution云原生工程师 最近,我一直在Kubernetes上进行各种测试和部署.因此,我不得不一次又一次创建和销毁Kubernete ...