作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/04/30 10:47:22
matlab 全排列
perm只能求1~9的,用递归求全排列
matlab 全排列perm只能求1~9的,用递归求全排列
哈哈,我用的是"递增进位制数法"(方法源自网上)
代码如下:
%%%%%%%%%%%%以下计算出新的排列%%%%%%%%%%%%%
%% 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