caioj1031:递归1(全排列)
来源:互联网 发布:mysql delete sql 编辑:程序博客网 时间:2024/06/05 09:06
【闲话】 上午讲的ww 可能因为早起加上来学校等了很久才开门比较热 精神状态并不好 老师讲的时候没怎么听懂 吃完饭看了遍视频 才有感觉qwq 把网站代码和老师的比对了一下以及和翔讨论之后 搞懂了函数的if return 可以用if else 替换 以及这里不需要用a[i]判断的话不用a[i]=0; 大概就是这样
【题意】
先给一个正整数 ( 1 < = n < = 10 ),输出所有全排列。
什么是全排列,例如n=3,输出所有组合,并且按字典序输出:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
每个全排列一行,相邻两个数用空格隔开(最后一个数后面没有空格)
【输入格式】
一行一个整数n。
【输出格式】
输出1~n的所有全排列。
【样例输入】
3
【样例输出】
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
【代码】
//所有数中选 效率低 #include<cstdio>using namespace std;int n,a[20];bool used[20];void dfs(int k){if(k==n+1){for(int i=1;i<=n;i++) i<n?printf("%d ",a[i]):printf("%d\n",a[i]);}else for(int i=1;i<=n;i++){ if(!used[i]){ a[k]=i; used[i]=true;dfs(k+1);//a[k]=0;used[i]=false; }} }int main(){scanf("%d",&n);dfs(1);return 0;}
#include<cstdio>using namespace std;int n,a[20],b[20];void dfs(int k){if(k==n+1){ for(int i=1;i<=n;i++){ i<n?printf("%d ",a[i]):printf("%d\n",a[i]); }}else for(int i=1;i<=n;i++){if(b[i]){a[k]=i;b[i]=0;dfs(k+1);//a[k]=0;b[i]=1;}}}int main(){scanf("%d",&n);for(int i=1;i<=n;i++) b[i]=1;dfs(1);return 0;}
阅读全文
0 0
- caioj1031:递归1(全排列)
- caioj1031·递归1(全排列,搜索入门)
- (递归)全排列
- 全排列算法(递归)
- 全排列(递归)js
- 全排列(非递归)
- 全排列算法(递归)
- 全排列(next_permutation,递归)
- 全排列(递归与非递归)
- 全排列生成 (递归+非递归)
- 手写全排列(递归 | 非递归)
- Algorithm--全排列2递归(c#)
- 递归生成全排列(常规)
- 全排列问题(递归算法) 汇总
- 全排列生成算法(非递归)
- 全排列(非递归版)
- 全排列算法递归实现(可重集)
- 全排列(递归方法,模板实现)
- 嵌入式学习29(自实现ls -l)
- 跳转以及解决乱码&getParameter和getAttribute区别
- Java集合——HashMap
- java编程:两个无序数组a和b,交换a,b中的元素,使得[序列a元素的和]与[序列b元素的和]之间的差最小。
- eclispe 创建 maven 项目
- caioj1031:递归1(全排列)
- intent 详解
- Toolbar TabLayout ViewPager
- VPI step by step(1)
- CASD单点登录学习笔记
- Delphi XE2中报错floating point invalid operation 算术运算中发生溢出或下溢
- socket网络编程(1)-socket基本概念
- 51单片机的I/O口
- 【STL】智能指针auto_ptr