如何用matlab产生1到n的所有排列数

如题所述

用perms函数就可以,例如求1到4的全排列:

 v=[1,2,3,4];
>> f=perms(v)

f =

     4     3     2     1
     4     3     1     2
     4     2     3     1
     4     2     1     3
     4     1     2     3
     4     1     3     2
     3     4     2     1
     3     4     1     2
     3     2     4     1
     3     2     1     4
     3     1     2     4
     3     1     4     2
     2     3     4     1
     2     3     1     4
     2     4     3     1
     2     4     1     3
     2     1     4     3
     2     1     3     4
     1     3     2     4
     1     3     4     2
     1     2     3     4
     1     2     4     3
     1     4     2     3
     1     4     3     2

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-05
perms(1:n)
或者用递归算法
function yyy=pai(xxx)
n=length(xxx);
if n>1
yyy=[];
for i=1:n
zzz=pai( [xxx(1:i-1),xxx(i+1:end) ] );
yyy=[yyy;[ones(size(zzz,1),1).*xxx(i),zzz]];
end
else
yyy=xxx;
end
调用时写pai(1:n)就行了
相似回答