新微赢技术网

标题: 如何实现全排列 [打印本页]

作者: ┗白觀喑﹖    时间: 2009-11-4 00:04
标题: 如何实现全排列
随便输入一个数字字符串,然后,将它的全排列全部输出来。
比如,输入123,则输出 123,132,213,231,321,312;
      输入331,则输出 331,313,133.
作者: £籍の口∮    时间: 2009-11-4 00:04
你用循环吧..然后剔除相同项的排列....
作者: →大虾米々    时间: 2009-11-4 00:04
可以用递归:
#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 );
}
作者: ˊ.龙之吻︷    时间: 2009-11-4 00:04
这个题目我做过好几遍了..以前都是用递归..发觉循环也可以做..呵呵..而且不像递归那样难理解...你的写的不错..很经典..呵呵
作者: 紫恋    时间: 2009-11-4 00:04
stl中next_permutation就是使用的迭代算法。




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2