栗子
123
排列
123
132
213
231
321
312
。这个递归 每一个数轮流当做前面的数 后面的数全排列 到了最后就是3的全排列 2的全排列 1的全排列
然后还要处理重复数 ij之间不能有重复 因为全排列的时候 有重复数字 排列的结果有程序就有重复的
完整马
a={1,2,3};
local i;
local r
function Can(i,j)
local z;
for z=i,j-1,1 do
if (a[z]==a[j])then
return 0
end
end
return 1
end
function A(i)
if(i ==3)then
print(a[1],a[2],a[3])
return
end
local j
for j=i,3,1 do
if (Can(i,j)>0)then
local t=a[i];//交换
a[i]=a[j];
a[j]=t;
A(i+1);//递归n-1
t=a[i];//回溯 交换回来恢复原样
a[i]=a[j];
a[j]=t;
end
end
end
A(1)