caioj1031:递归1(全排列)
2017-08-27 15:06
387 查看
【闲话】 上午讲的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
【代码】
替换 以及这里不需要用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; }
相关文章推荐
- caioj1032· 递归2(组合)
- caioj1036:递归6(统计出栈)
- caioj1033:递归3(组合+判断素数)
- caioj1040:递归10(素数圈)
- caioj1037:递归7(走迷宫)
- caioj1042:递归12(平分石头)
- caioj1043·递归13(因式分解【深搜+剪枝 或 DP 】)
- 递归--任意字符全排列(第二次写)
- 生成8位26个字母和数字的全排列(密码字典,密钥)c++代码(非递归高效直接)
- 求模(非递归)全排列算法——Javascript实现
- 字符串全排列的递归和非递归实现
- (RQoj 15 采药------rwkj 10.1.5.253 1447) 递归 2
- 非递归和递归实现全排列
- 全排列(递归)js
- 由erlang的递归理解数组的全排列问题
- oj 1903: 有假币(递归)
- csu oj 1031 Real Numbers(模拟)
- 全排列的递归实现方法
- 全排列(含递归和非递归的解法)
- OJ_1031