主体函数如下:
/*=====================================================
函数功能:对 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
|