#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
using namespace std;
//全排列, 确定好第一个数后,对后面的数据进行全排列,然后一次交换第一个数据与后面每一个数据的位置,递归的形式进行全排列
template<class T>
void Swap(T &a, T&b) {
T temp;
temp = a;
a = b;
b = temp;
}
template<class T>
void perm(T list[], int k, int m) {
if(k == m) {
for(int i=0; i<=m; i++)
//printf("%d ", list[i]);
cout<<list[i]; //第一次发现cout比printf好用,打印的时候不需要考虑数据的类型
cout<<endl;
}
else {
for(int i=k; i<=m; i++) {
Swap(list[k], list[i]);
perm(list, k+1, m);
Swap(list[k], list[i]);
}
}
}
int main()
{
int list[3] = {1, 2, 3};
char list1[3] = {'a', 'b', 'c'};
perm(list1, 0, 2);
perm(list, 0, 2);
return 0;
}
全排列 利用template的时候,用cout打印不需要考虑变量的类型,这点比printf好用
最新推荐文章于 2021-05-28 15:18:15 发布