按照字典序枚举排列
2014-03-12 20:31
225 查看
打印所有的排列
写了两个小程序,一个用于打印全排列,另一个用于打印可重复的排列。两个都是按字典序排列,用递归实现。后一个只是去掉了布尔型数组和相应的重复判断。代码贴出来:
/* * 打印n的全排列! */ #include <iostream> #include <cstring> using namespace std; #define MAX 200 void print_permutation(int, bool *, int *, int); int main() { int n; bool isPrint[MAX]; int v[MAX]; memset(isPrint, 0, sizeof(isPrint)); memset(v, 0, sizeof(v)); cin >> n; print_permutation(0, isPrint, v, n); return 0; } void print_permutation(int num, bool *isPrint, int *v, int n) { if (num == n) { for (int i = 0; i < n; ++ i) { cout << v[i] << " "; } cout << endl; return ; } else { for (int i = 0; i < n; ++ i) { if ( !isPrint[i] ) { isPrint[i] = 1; v[num] = i + 1; // 打印第num+1个数 print_permutation(num + 1, isPrint, v, n); isPrint[i] = 0; } } } }
/* * 打印可重复的n排列! */ #include <iostream> #include <cstring> using namespace std; #define MAX 200 void print_permutation(int, int *, int); int main() { int n; int v[MAX]; memset(v, 0, sizeof(v)); cin >> n; print_permutation(0, v, n); return 0; } void print_permutation(int num, int *v, int n) { if (num == n) { for (int i = 0; i < n; ++ i) { cout << v[i] << " "; } cout << endl; return ; } else { for (int i = 0; i < n; ++ i) { v[num] = i + 1; // 打印第num+1个数 print_permutation(num + 1, v, n); } } }
相关文章推荐
- (POJ 3687)Labeling Balls [逆top序列] 求按照某种排列方式的字典序最小的top序列
- 按照字典序生成1--n的排列
- 多种排列方式满足条件,输出按照名字排列字典序最小的一个
- 数的组合问题,从n个数中选出m个数,结果按照字典序排列
- 今天开始学Java 给定n个字符串,请对n个字符串按照字典序排列。
- 给定n个字符串,请对n个字符串按照字典序排列
- 【枚举排列】字典序输出
- 华为OJ---给定n个字符串,对n个字符串按照字典序排列
- n个字符串按照字典序排列
- python给定n个字符串,请对n个字符串按照字典序排列
- 将名字按照字典序排列
- 给定n个字符串,请对n个字符串按照字典序排列。
- Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好。请大家给Lily帮忙,通过C语言解决。
- 简单的排列组合-使用枚举
- 排列的字典序问题
- 在一个二维数组中,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下递增的顺序排列,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 排列的字典序问题
- 【POJ2718】Smallest Difference(枚举排列)
- 枚举排列