排列组合问题:
描述:
输入:a,b,c
输出:a,b,c a,c,b b,a,c b,c,a c,a,b c,b,a
思路:
(1)递归的终止条件;排列数组个数为1的时候,直接输出
(2)递归条件;排列大于1的时候,由子问题构成。
代码:
template<class Type>
void perm(Type list[],int k, int m)
{
//递归终止条件
if(k == m)
{
for(int i = 0; i <= m;i++)
{
cout<<list[i]<<endl;
}
}
//递归条件
else
{
for(int i = k;i <=m;i++)
{
swap(list[k],list[i]);
perm(list,k+1,m);//前k个已经排好,继续后面的排列
swap(list[k],list[i]);
}
}
}
图解;