lua实现全排列和组合排列

来源:互联网 发布:ubuntu docker 编辑:程序博客网 时间:2024/05/21 19:21
--组合排列function sub(head,index,r,k,a)    for  i=head,#a+index-k do        if(index<k) then                r[index ] = a[i];            sub(i + 1, index + 1, r, k,a);        elseif (index == k)  then            r[index ] = a[i];            --local t=""            --t = table.concat(r)               --TracePrint(t,#t)            //全排列和组合排列一起使用            fullPermutation(r)        end    end end function fullsub(t,start,end1,r)    r = {}    start =start or  1    end1 = end1  or  #t    for tmpi=start, end1 do        sub(1,1,r,tmpi,t)    endend--以下为全排列function IsSwap (fullArray, start,end1)--这个还未理解    for tmpi=start,end1-1 do         if  fullArray[tmpi] == fullArray[end1]  then                return false        end    end    return trueendfunction  fullPermutation(fullArray, start,end1)    assert(type(fullArray) == "table", "参数类型错误")    start = start or 1    end1  =end1  or #fullArray    local  ret =""    --出口    if  start >= end1 then        for tmpii=1,#fullArray do             ret = ret .. fullArray[tmpii]        end         TracePrint(ret)        return      end    --else     for tmpi=start,end1 do         --  交换得到新的排列        --去除重复数字        if  IsSwap (fullArray, start,tmpi)  then            fullArray[tmpi] ,fullArray[start]=fullArray[start],fullArray[tmpi]             --swap(fullArray,start,tmpi)            --递归             fullPermutation(fullArray, start+1,end1)            --还原至最初的排列            fullArray[tmpi] ,fullArray[start]=fullArray[start],fullArray[tmpi]            --end        end    end    --endend--测试代码a={4,5,6}fullsub(a)
0 0
原创粉丝点击