注册 登录
编程论坛 C++教室

如何实现全排列

tszhao 发布于 2008-04-04 13:08, 872 次点击
随便输入一个数字字符串,然后,将它的全排列全部输出来。
比如,输入123,则输出 123,132,213,231,321,312;
      输入331,则输出 331,313,133.
4 回复
#2
sunkaidong2008-04-04 19:06
你用循环吧..然后剔除相同项的排列....
#3
baoyibao2008-04-04 23:36
可以用递归:
#include <iostream>

template<class T>
inline void swap( T& a, T& b )
{
    T tmp = a;
    a = b;
    b = tmp;
}

template<class T>
void Perm( T list[], int start, int end )
{
    int i;
   
    if ( start == end )
    {
        for ( i = 0; i <= end; i++ )
            cout << list[i];
        cout << endl;
    }
    else
        for ( i = start; i <= end; i++ )
        {
            swap( list[start], list[i] );
            Perm( list, start+1, end );
            swap( list[start], list[i] );
        }
}

void main()
{
    int list[] = {1,2,3,4,5};
    Perm( list, 0, 4 );
}
#4
sunkaidong2008-04-05 09:35
这个题目我做过好几遍了..以前都是用递归..发觉循环也可以做..呵呵..而且不像递归那样难理解...你的写的不错..很经典..呵呵

[[it] 本帖最后由 sunkaidong 于 2008-4-5 09:41 编辑 [/it]]
#5
aipb20072008-04-05 11:29
stl中next_permutation就是使用的迭代算法。
1