19 擅长排列的小明【dfs】
2015-08-09 14:24
288 查看
擅长排列的小明
时间限制:1000 ms | 内存限制:65535 KB难度:4
描述小明十分聪明,而且十分擅长排列计算。比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想为难他,在这5个数字中选出几个数字让他继续全排列,那么你就错了,他同样的很擅长。现在需要你写一个程序来验证擅长排列的小明到底对不对。
输入第一行输入整数N(1<N<10)表示多少组测试数据,
每组测试数据第一行两个整数 n m (1<n<9,0<m<=n)
输出在1-n中选取m个字符进行全排列,按字典序全部输出,每种排列占一行,每组数据间不需分界。如样例
样例输入
2 3 1 4 2
样例输出
1 2 3 12 13 14 21 23 24 31 32 34 41 42 43
dfs 的简单用法,打印全排列和全组合,其实排列比组合容易打,只需要加上标记,下次跳过就可以了,但是组合还需要按指定的顺序来打印,简单的dfs递归运用....
做题不要看难度,太不可信了....呃呃呃....
#include<stdio.h> #include<string.h> int x[15],y[15],vis[15],n,r; void dfs(int v) { if(v>=r)//控制输出 { for(int i=0;i<r;++i) { printf("%d",x[i]); } printf("\n"); return; } for(int i=0;i<n;++i)//多层递归,实现多层循环储存 { if(!vis[i]) { vis[i]=1; x[v]=y[i]; dfs(v+1); vis[i]=0; } } } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&r); memset(vis,0,sizeof(vis)); for(int i=0;i<n;++i) { y[i]=i+1;//赋值 } dfs(0);//操作 } return 0; }
相关文章推荐
- oc中的工厂设计模式
- Spring基于自定义注解的用户认证
- Spring实现定时任务
- 线程小结
- Android中使用友盟时用Ant进行多渠道打包及相关问题
- block深入学习
- 尝试使用枚举类存储静态变量
- 如何在需求不断改变的情况下愉快的写代码
- Dexpress 中 grid的使用
- Services
- 最短路专题-1001 Constructing Roads
- Mysql常用函数
- 浅析Java中的final关键字
- HDU5353.Average(多校第六场)
- HDU - 1702 - ACboy needs your help again!(栈&&队列)
- 并查集详解
- HUD Problem - 1251 统计难题
- leetcode 90: Subsets II
- Keil 重定向 printf
- 使用vs2015编译zlib1.28