N皇后问题是八皇后问题的拓展,N皇后问题要满足N行N列的方格里面放N个皇后,保证不同行、不同列、不同对角线

分析:
可以用暴力,对规模较小的皇后问题当然可以,判断是否可以放置的条件甚至可以一步到位,但是N皇后问题的规模就可能很大了,暴力遍历行不通。

利用循环可以一行一行的做主循环,那么我们就在这个主循环下面保证不同列、不同对角线,以此来判断是否可以放置皇后。完成后保存结果继续对下一行施行该操作,这就满足了递归思想。

关键是剪枝,一定要在放置皇后之前判断是否可以放置,如果没有必要放置就不在此基础上做下一层递归,避免不必要的递归造成复杂度变大。

N皇后问题(N<=10)的代码如下:

#include<bits/stdc++.h>
using namespace std;
int n,tot=0;//tot用来记录N皇后问题的可实现个数
int col[12]={0};//用来模拟每一行的皇后放置情况
//例如col[i]=j表示在第i行的第j列放置了皇后
bool check(int c,int r){//检查是否和之前放置的皇后冲突for(int i=0;i<r;i++)//不同行已经保证了if(col[i]==c||(abs(col[i]-c)==abs(i-r)))//判断是否不同列、对角线return false;return true;
}
void DFS(int r){if(r==n){tot++;return;}for(int c=0;c<n;c++)//在每一列放置皇后if(check(c,r)){//检查这一行的第c列能否放置皇后col[r]=c;//可以的话就放置,并进入下一层递归DFS(r+1);}
}
int main(){int ans[12];for(n=0;n<=10;n++){//要注意提前打表,否则会超时memset(col,0,sizeof(col));tot=0;DFS(0);ans[n]=tot;}while(~scanf("%d",&n)){if(!n)break;printf("%d\n",ans[n]);}
}

N皇后问题——DFS+回溯剪枝相关推荐

  1. hdu2553 N皇后问题-dfs回溯剪枝+打表

    Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上. 你的任务是,对于给定的N ...

  2. 洛谷 P1219-八皇后(dfs回溯)

    题目描述 网址传送:https://www.luogu.com.cn/problem/P1219 八皇后问题描述:介是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于 ...

  3. POJ1416 Shredding Company ACM解题报告(DFS回溯+剪枝)

    本渣渣明天C语言考试,今天有点亢奋,又来了一题,这题感觉比前一题难多了,不仅是字符串转化为数字,即使看了百度提醒的搜索树,还是参考了一些百度的代码.感觉道阻且长,我仍需努力.下面是题目翻译: 公司现在 ...

  4. 【LeetCode】回溯 N皇后(DFS、子集、组合问题)

    总结 技巧: 子集和组合问题经常需要一个start来标记开始选择的起始位置来达到去重的目的,排列问题不用 [46.全排列] 排列问题常需要一个used数组来标记已经选择的元素(也可以同时用于去重) C ...

  5. 岛屿问题,矩阵:DFS+标记剪枝+回溯

    深度优先搜索: 可以理解为暴力法遍历矩阵中所有字符串可能性.DFS 通过递归,先朝一个方向搜到底,再回溯至上个节点,沿另一个方向搜索,以此类推. 剪枝: 在搜索中,遇到 这条路不可能和目标字符串匹配成 ...

  6. DFS+回溯算法专题

    基础知识 回溯法是一种选优搜索法(试探法),被称为通用的解题方法,这种方法适用于解一些组合数相当大的问题.通过剪枝(约束+限界)可以大幅减少解决问题的计算量(搜索量). 深度优先搜索(Depth-Fi ...

  7. 八皇后时间复杂度_回溯算法 | 追忆那些年曾难倒我们的八皇后问题

    文章收录在公众号:bigsai,关注更多干货和学习资源 记得点赞.在看 前言 说起八皇后问题,它是一道回溯算法类的经典问题,也可能是我们大部分人在上数据结构或者算法课上遇到过的最难的一道题-- 在这里 ...

  8. Leetcode一起攻克搜索(BFS,DFS,回溯,并查集)

    文章目录 BFS简介 DFS简介 回溯简介 并查集简介 DFS题目 690. 员工的重要性 1.dfs解法: 2.bfs算法 547.朋友圈 dfs解法 200.岛屿数量 dfs解法 417.太平洋大 ...

  9. HDU1016 Prime Ring Problem dfs+回溯

    点击打开链接 Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  10. LeetCode 980. 不同路径 III(DFS+回溯)

    1. 题目 在二维网格 grid 上,有 4 种类型的方格: 1 表示起始方格.且只有一个起始方格. 2 表示结束方格,且只有一个结束方格. 0 表示我们可以走过的空方格. -1 表示我们无法跨越的障 ...

最新文章

  1. codeforces round 416 div2补题
  2. 人工智能 机器学习系列 2:代价函数
  3. centos6.9安装Tomcat8.0.36
  4. 好程序员web前端分享js剪切板Clipboard.js 使用
  5. win7查看某个端口被占用的解决方法
  6. PL/SQL编程的简单学习
  7. Windows备份服务器运行失败,用Windows Server Backup搞定服务器备份
  8. 第十章:SpringCloud Zuul路由器和过滤器
  9. 早上起床后喝一杯白开水是非常有好处的
  10. Hadoop工作流--JobControl(五)
  11. 微端服务器物品备注,HeroM2引擎怎么在装备上添加备注 传奇添加物品备注说明的方法...
  12. OpenGL学习之旅(三)——Bezier曲线理论与OpenGL实现
  13. 超详细软件工程黑书思维导图(从第一章到第八章)
  14. 图解最短路径之迪杰斯特拉算法(Java实现)
  15. Android产品研发(二十一)--Android中的UI优化
  16. echarts正负极柱状图
  17. qt opengl 3d基本形状-螺旋管
  18. java 时间before_Java中的即时isBefore()方法
  19. DEFCON CTF 2017圆满收关,三支中国战队闯入全球前五
  20. 上海交通大学计算机科学与工程系,上海交通大学计算机科学与工程系(CSE)

热门文章

  1. 云小蜜知识库维护的流程和维护建议
  2. 第二篇:从 GPU 的角度理解并行计算
  3. 一封来自老男孩的学生的辞职信!
  4. 【Android综合应用】概述
  5. vue 中 v-if 和 v-for 混用时应该注意的事项
  6. spring cloud 搭建问题记录
  7. 计算机一级b考试电子表格,计算机等级考试一级B第1-50套题
  8. echarts 加载优化_【第1615期】React Native 图表性能优化实践
  9. 机电工程系计算机网络技术,我院物联网工程专业3+1及计算机网络技术专业2+1项目正式开营...
  10. 华为私有云的搭建方案_私有云平台搭建物业管理系统