返回列表 发帖

对 N 组 字符串无重复全排列的算法

主体函数如下: /*===================================================== 函数功能:对 N 组 字符串无重复全排列的算法 要点:函数采用递归形式,理论上做到对任意 N 进行全排列 0256 或 N<1 -2 X<0 或 X>N N 选 X 全排列的估算: N=X 全排列为 N! 0256 then return -1 if pos(upper(as_value[1]),'N=')<>0 then num=integer(mid(as_value[1],pos(upper(as_value[1]),'N=')+2,100)) if num<1 or num>256 then return -1 end if if as_nLevel<0 or as_nlevel>num then return -2 as_nLevel++ if(as_nLevel>NUM) then //求得一种组合形式 l=upperbound(as_return) l++ s='' for nCount=1 to NUM //进行字符串排列 if as_List[nCount]<>0 then if pos(upper(as_value[1]),'N=')=0 then s=s+as_value[as_List[nCount]]+as_char else s=s+string(as_List[nCount])+as_char end if end if next s=left(s,len(s) -1) t=0 if as_allowrepeat=false then //寻找重复的字符串组合 k=upperbound(as_return) for i=1 to k if as_return=s then t=1 exit end if next end if //寻找end if t=0 then as_return[l]=s as_nLevel -- return as_nLevel end if for nCount=1 to NUM key=0; for nJudge=1 to as_nLevel -1 if nCount=as_List[nJudge] then key=1 exit end if next if key=0 then as_List[as_nLevel]=nCount as_nLevel=f_string_compages(as_value,as_nLevel,as_char,as_allowrepeat,as_List,as_return) end if next as_nLevel -- return as_nLevel

返回列表 回复 发帖