matlab 全排列

perm只能求1~9的,用递归求全排列

第1个回答  2010-12-12
哈哈,我用的是"递增进位制数法"(方法源自网上)

代码如下:
%%%%%%%%%%%%以下计算出新的排列%%%%%%%%%%%%%
%% Author by wacs5
%% 排列的总个数为n!
%% 在指定位置插入代码即可

%clc
%clear
n=3;
n_1=prod(1:n);
allorder_K=zeros(1,n-1);
tic
for allorder_m=1:n_1 %产生n!个排列
allorder_flag=zeros(1,n);
allorder_P=zeros(1,n);
for allorder_i=1:n-1
position=n-allorder_K(allorder_i);
allorder_j=n;
while(allorder_j>=position)
if (allorder_flag(allorder_j)==1)
position=position-1;
end
allorder_j=allorder_j-1;
end
allorder_P(position)=n+1-allorder_i;
allorder_flag(position)=1;
end
for allorder_i=1:n
if (allorder_flag(allorder_i)==0)
allorder_P(allorder_i)=1;
break;
end
end
%%%%以下更新K
for allorder_i=1:n-1
allorder_K(n-allorder_i)=mod(allorder_K(n-allorder_i)+1,allorder_i+1);
if (allorder_K(n-allorder_i)~=0)
break;
end
end

%%%下面,可以引用allorder_P进行相关处理
allorder_P
end
toc本回答被提问者和网友采纳
第2个回答  2010-12-13
perms(a);给出这个数列a的所有排列
perms可以求任意数列的全排列,楼主你自己试试啊
相似回答