暴力求解法(之 回溯)-程序员宅基地

技术标签: 数据结构与算法  

注意事项:

  1. 如果在回溯法中修改了全局变量,除非特殊需要,要及时把他恢复原样 ,若函数有多个出口,一定要在每个出口出恢复哦。
  2. 注意有些题目的特殊需要(如:素数环中判断第一个和最后一个,别忘了哦)。
  3. 要避免不必要的判断: 前面的已经判断过了后,回溯时就不需要判断了(除非特殊,看情况吧)。

回溯技巧(应该可以用在其他搜索上) : 剪枝

典型例题:

八皇后:

https://www.luogu.org/problemnew/show/P1219

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int n,tot,tmp;
 5 int vis[3][200];//用数组判断在当前行能不能放皇后;
 6 //提高效率 
 7 int ans[13+9];//用于打印 (注:答案在ans[0] ~ ans[n-1] 中哦 
 8 
 9 void print_ans() {
10     for(int i = 0; i < n; i++)
11     {
12         printf("%d ",ans[i]+1);//这个+1没啥别的意思,就是我做的那题是从一开始的 
13     }
14     printf("\n");
15     return ;
16 }
17 
18 void dfs(int cur) {
    //参数是已搜到的层数 
19     if(cur == n) {
20         tot++;
21         tmp++;
22         if(tmp <= 3) print_ans();//......
23     }
24     else for(int i = 0; i < n; i++) {
25         if(!vis[0][i] && !vis[1][i+cur] && !vis[2][i-cur+n]) {
26             //列  x+y主对角线  x-y副对角线 上都没有皇后 注:副对角线相减有负的
27             vis[0][i] = vis[1][i+cur] = vis[2][i-cur+n] = 1;//标记已访问 
28             ans[cur] = i;
29             dfs(cur+1);
30             vis[0][i] = vis[1][i+cur] = vis[2][i-cur+n] = 0;//回溯 
31         }
32     }
33     
34 }
35 
36 int main() {
37     scanf("%d",&n);
38     dfs(0);//一层都没搜到,所以是0 
39     printf("%d",tot);
40     return 0;
41 }

 

转载于:https://www.cnblogs.com/tyner/p/10741684.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30588907/article/details/95136582

智能推荐

git submodule 子模块的基本使用_git包含子模块引用仓库,拉代码只拉到主仓库部分-程序员宅基地

文章浏览阅读886次。使用了submodule后,若不主动更新,项目会一直使用固定版本的submodule模块,需手动更新(若是在go或者其他有包管理的项目中,建议还是使用开发语言工具去做这种类似的第三方包管理会比较方便。_git包含子模块引用仓库,拉代码只拉到主仓库部分

MFC 更换背景图片的方法_mfc中鼠标按下时更换背景图片-程序员宅基地

文章浏览阅读4.8k次。void CRobotClientDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client r_mfc中鼠标按下时更换背景图片

java获得当前时间一小时前的时间_java获取当前时间前1h-程序员宅基地

文章浏览阅读2.1w次,点赞4次,收藏9次。Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) - 1);// 让日期加1 System.out.println(calendar.get(Calendar.D_java获取当前时间前1h

生成模型在计算机视觉、自然语言处理、推荐系统中的应用和研究_父母基因怎么组合-程序员宅基地

文章浏览阅读1.1k次。随着计算机的飞速发展,人工智能技术的逐渐成熟,越来越多的人开始关注这个新兴的领域,开始开发出新的产品和服务。在这个信息爆炸的时代,数据量的呈几何级增长,需要人们对海量数据的分析、处理和决策,而机器学习就是人工智能的一个重要组成部分。从传统的统计学习到深度学习(如卷积神经网络CNN),人工智能技术不断的进步,已经引起了很大的社会影响。在这个过程中,生成模型是一个非常重要的工具,它可以用来帮助理解复杂的数据集。通过训练一个生成模型,可以从父亲的基因中产生出一个系列可能的孩子的基因序列,_父母基因怎么组合

virtuoso 后仿 ADE L error_后仿真 referencing an undefined model or subcircuit-程序员宅基地

文章浏览阅读470次。解决办法:在model library添加dio_tt的model。原因:model library 没设置二极管的model。ADE后仿时出现error。_后仿真 referencing an undefined model or subcircuit

深度学习笔记——pytorch实现双向GRU(BiGRU)-程序员宅基地

文章浏览阅读1k次,点赞12次,收藏16次。参考视频。_双向gru

随便推点

stata质别变量赋值_【STATA学习笔记】虚拟变量的一些小注意-程序员宅基地

文章浏览阅读6.3k次,点赞3次,收藏23次。1. 定义 引入“虚拟变量(哑变量,dummy variable)”对定性数据或者分类数据,赋值0或者1。例如,对东部、中部、西部产生虚拟变量,则需要2个。因为east=1,表示东部;east=0,表示其他地区。同样middle=1,表示中部;middle=0,表示其他地区。那么east=0,且middle=0时,则表示west(西部)。 但是值得注意的是,(east=1的个数)+(m..._stata赋值0和1

安装mujoco报错:distutils.errors.DistutilsExecError: command ‘gcc‘ failed with exit status 1_mujoco/_callbacks.cpython-36m-x86_64-linux-gnu.so-程序员宅基地

文章浏览阅读5.6k次。  整个的报错记录如下:>>> import mujoco_pyrunning build_extbuilding 'mujoco_py.cymj' extensiongcc -pthread -B /home/hzq/anaconda3/envs/TianChi/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -Ianaconda3/envs/TianChi/li_mujoco/_callbacks.cpython-36m-x86_64-linux-gnu.so

Retrofit:使用【Retrofit】优雅地对接第三方接口_lianjiatech-程序员宅基地

文章浏览阅读1.6k次。我是 ABin-阿斌:写一生代码,创一世佳话,筑一览芳华。 如果小伙伴们觉得我的文章不错,记得一键三连,感谢~文章目录前言前言_lianjiatech

面试阿里 P6,过关斩将直通 2 面,结果 3 面找了个架构师来吊打我_阿里p6二面-程序员宅基地

文章浏览阅读984次,点赞2次,收藏4次。前言人人都有大厂梦,对于程序员来说,BAT 为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀上一层金,让人瞻仰。同样的,小编的好朋友的个人目标也是阿里,但之前一直在一家小公司,一呆就是好几年,现在通过不断学习和实践,提升了自己很多,也有了信心来阿里挑战。下面,就是朋友分享的这次面试阿里 P6 的一些经历和心得。阿里 P6 岗面试经历这次阿里的面试经历实朋友说实在是在太紧张+刺激+尴尬了,面试前还自信_阿里p6二面

开关稳压器详解(四)-Buck降压型开关稳压器自举电路_自举驱动的buck电路-程序员宅基地

文章浏览阅读8.9k次,点赞12次,收藏121次。在Buck开关中,常使用N-MOS管作为功率开关管。相比于P-MOS,N-MOS具有导通电阻低价格便宜且流过电流较大等优势。在同步结构中对于开关管的使用一般有两种方式:上管为P-MOS,下管为N-MOS;无需外部自举电路上下管均为N-MOS;需要外部自举电路从上图可知,由于N-MOS导通条件是栅极电压比源极电压高。对于上管而言必须增加自举电路才能保证上管完全导通。下面就介绍下自举电路..._自举驱动的buck电路

YOLOv4 介绍及其模型优化方法-程序员宅基地

文章浏览阅读2.2k次。YOLOv4 介绍及其模型优化方法一、YOLOv4 介绍2020 年 4 月,YOLOv4 在悄无声息中重磅发布,在目标检测领域引起广泛的讨论。在 YOLO 系列的原作者 Joseph R..._yolo模型剪枝和蒸馏