设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 2031|回复: 4
打印 上一主题 下一主题

如何实现全排列

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-4 00:04:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
随便输入一个数字字符串,然后,将它的全排列全部输出来。
比如,输入123,则输出 123,132,213,231,321,312;
      输入331,则输出 331,313,133.
2#
发表于 2009-11-4 00:04:52 | 只看该作者
你用循环吧..然后剔除相同项的排列....
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-4 00:04:53 | 只看该作者
可以用递归:
#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#
发表于 2009-11-4 00:04:55 | 只看该作者
这个题目我做过好几遍了..以前都是用递归..发觉循环也可以做..呵呵..而且不像递归那样难理解...你的写的不错..很经典..呵呵
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-4 00:04:58 | 只看该作者
stl中next_permutation就是使用的迭代算法。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 16:22 , Processed in 0.088953 second(s), 8 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表