template<class T> void Perm(T list[], int k, int m) { / /生成list [k:m ]的所有排列方式 int i; if (k == m) {//输出一个排列方式 for (i = 0; i <= m; i++) cout << list [i]; cout << endl; } else // list[k:m ]有多个排列方式 // 递归地产生这些排列方式 for (i=k; i <= m; i++) { Swap (list[k], list[i]); Perm (list, k+1, m); Swap (list [k], list [i]); } } 程序1 - 11 交换两个值 template <class T> inline void Swap(T& a, T& b) {// 交换a和b T temp = a; a = b; b = temp; } |
原帖由 jiony 于 2008-9-18 00:48 发表
[排列] 通常我们希望检查n 个不同元素的所有排列方式以确定一个最佳的排列。比如,
a,b 和c 的排列方式有:a b c, a c b, b a c, b c a, cab 和c b a。n 个元素的排列方式共有n ! 种。
由于采用非递归的C + ...
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |