洛谷P1706 全排列问题
题目描述
输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入输出格式
输入格式:
n(1≤n≤9)
输出格式:
由1~n组成的所有不重复的数字序列,每行一个序列。每个数字保留5个常宽。
输入输出样例
3
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1 深搜的入门题。
为什么放在了我的博客上?
因为本弱正在重温深搜,最后发现自己啥也不是。于是开始重刷基础题,顺便也对深搜有了更扎实一点点的理解。在这里分享给像我一样的新手菜鸟们。
任意一本算法书都会告诉你顾名思义,事实上深搜和广搜的确就是顾名思义,一个先往深了走,一个先往广了走,一个按链,一个按层。
但是我做深搜的时候会遇到很多困扰:
这题为什么就用深搜了?
这题的深搜代码为啥这么写?
这题的图呢?
是的,最终要点就是:树呢?图呢?
所以,针对每个深搜问题,我们都需要先构建搜索树。
然后在树上搜索,就解决了我刚刚的问题。
而以后学深搜,对剪枝方面的理解,也会更加深刻。 比如这道题,以N=3为例,一共有3个空位。
第一位分别放1,2,3。
假如第一位是1(深搜嘛)
第二位也可以放1,2,3
放1不行(剪枝)
然后第三位可以放1,2,3
在第二位分别是2,3的基础上分别剪枝。
思路就出来了。 接下来是搜素函数。
搜索函数是深搜中的极其重要的一个环节。
这道题要建两个数组。
第一个存数字。
第二个存标记。
然后要注意递归边界。
如果搜满了就输出。
如果没搜满就开始搜,先填一个格子,标记,填下一个,再深搜。
代码如下:
#include<cstdio>
using namespace std;
int n;
int a[],v[];
void dfs(int x)
{
if(x==n+)
{
for(int i=;i<=n;i++)
printf(" %d",a[i]);
printf("\n");
return;
}
for(int i=;i<=n;i++)
{
if(v[i]==)
{
a[x]=i;
v[i]=;
dfs(x+);
v[i]=;
}
}
}
int main()
{
scanf("%d",&n);
dfs();
return ;
}
洛谷P1706 全排列问题的更多相关文章
- 洛谷 P1706 全排列问题
题目链接 https://www.luogu.org/problemnew/show/P1706 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数 ...
- 洛谷 P1706 全排列
可能是最简单的题了……讲真搜索hhh 洛谷 P1706 全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入输出格式 输入格式: ...
- 洛谷——P1706 全排列问题
P1706 全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入输出格式 输入格式: n(1≤n≤9) 输出格式: 由1-n组成 ...
- 洛谷P1706全排列问题
P1706 全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入输出格式 输入格式: n(1≤n≤9) 输出格式: 由1-n组 ...
- 【洛谷P1706全排列问题】
题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 代码如下: #include<iostream>#include<cstd ...
- 洛谷 P1706 全排列问题 :STL / dfs
题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入输出格式 输入格式: n(1≤n≤9) 输出格式: 由1-n组成的所有不重复的数字序列, ...
- 【递归】P1706全排列问题
题目相关 题目描述 输出自然数 1 到 n所有不重复的排列,即 n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入格式 一个整数 n**. 输出格式 由 1∼n 组成的所有不重复的数字 ...
- 洛谷试炼场-简单数学问题-P1088 火星人
洛谷试炼场-简单数学问题 A--P1088 火星人 Description 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法 ...
- 【洛谷】【洛谷月赛】4月月赛Round 1/2
洛谷月赛“月”来“月”丧了,一月更比一月丧,做得我十分不“月”…… 4月的两轮月赛,都只会T1,就写一下吧,等待后续更新…… 先看看Round1的T1: [R1T1] 网址:点我 [题意简述] 给定一 ...
随机推荐
- 【Excel】创建目录
1.=INDEX(GET.WORKBOOK(1),ROW(A1))&T(NOW()) 2. =IFERROR(HYPERLINK(我的目录&"!A1",MID(我的 ...
- 002Excel冻结窗口(冻结第二行)
不知道是最近状态不好还是怎么回事Excel冻结前面两行居然弄了很久,而工作上又急需,为此还是记录一下 其实超级简单(不会的话就很难) 如果冻结一行 这个非常简单 那么冻结前面两行呢?我研究了很久,其实 ...
- 事件代理/事件委托----点击li弹出对应的下标和内容
<body> <ul> <li>这是第一行</li> <li>这是第二行</li> <li>这是第三行</li ...
- DRF--验证器
前戏 在之前我们对前端妹子传来的数据进行校验,使用的是序列化类来进行校验的,但这里面往往满足不了我们的需求,更多的时候我们希望自己定义校验规则.这里介绍三种自定义校验的方式.分别是单一字段校验,多个字 ...
- mybatis报错:Invalid bound statement (not found)
mybatis报错:Invalid bound statement (not found)的原因很多,但是正如报错提示一样,找不到xml中的sql语句,报错的情况分为三种: 第一种:语法错误 Java ...
- vue项目打包之后样式错乱问题,如何处理
最近公司做的这个项目,要大量修改element里面的css样式,所以项目打包之后 会出现样式和本地开发的时候样式有很多不一样,原因可能是css加载顺序有问题,样式被覆改了. 所以在mian.js里面这 ...
- 启明星MRBS会议室预约系统V30.0发布
MRBS系统官方网址 https://www.dotnetcms.org/ 在线演示 http://demo.dotnetcms.org/mrbs 用户名admin,密码123456 Meeting ...
- 永久清理git中的历史大文件
原文发布于:https://www.chenxublog.com/2019/05/26/remove-git-big-files.html 有写老的git仓库,因为当年的无知,不会用.gitignor ...
- C# 去除数字中多于的0
decimal i = decimal.Parse(Console.ReadLine()); Console.WriteLine((i).ToString(")); Console.Writ ...
- 利用Java EE里jsp制作登录界面
jsp连接数据库.百度经验. 1.在新建的Project中右键新建Floder 2.创建名为lib的包 3.创建完毕之后的工程目录 4.接下来解压你下载的mysql的jar包,拷贝其中的.jar文件 ...