免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2199 | 回复: 2
打印 上一主题 下一主题

全排列算法,山寨版 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-27 13:34 |只看该作者 |倒序浏览
#coding=cp936
'''求全排列,如[1,2,3]的全排列即3的阶乘,为[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
'
''
def full(lst):
    if len(lst) == 1:
        return [lst]
    lst2 = []
    for i in lst:
        lst_tmp = lst[:]
        lst_tmp.remove(i)
        for j in full(lst_tmp):
            lst2.append([i]+j)
    return lst2

print full([1,2,3,4])

>pythonw -u "full_arrange.py"
[[1, 2, 3, 4], [1, 2, 4, 3], [1, 3, 2, 4], [1, 3, 4, 2], [1, 4, 2, 3], [1, 4, 3, 2], [2, 1, 3, 4], [2, 1, 4, 3], [2, 3, 1, 4], [2, 3, 4, 1], [2, 4, 1, 3], [2, 4, 3, 1], [3, 1, 2, 4], [3, 1, 4, 2], [3, 2, 1, 4], [3, 2, 4, 1], [3, 4, 1, 2], [3, 4, 2, 1], [4, 1, 2, 3], [4, 1, 3, 2], [4, 2, 1, 3], [4, 2, 3, 1], [4, 3, 1, 2], [4, 3, 2, 1]]
>Exit code: 0

论坛徽章:
0
2 [报告]
发表于 2009-03-27 15:18 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2009-03-28 11:37 |只看该作者
def perm(s,k,m):
    if k==m:
        print s
    else:
        for i in range(m-k+1):
            s[k],s[i+k]=s[i+k],s[k]
            perm(s,k+1,m)
            s[k],s[i+k]=s[i+k],s[k]
s=[1,2,3,4]
perm(s,0,len(s)-1)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP