在matlab中、如何进行全排列

在matlab中、如何进行全排列,第1张

A=perms([1 2 3 4 5 0 0])

a1=find(A(:,1)==0)a2=find(A(:,7)==0)

aa=union(a1,a2)

A(aa,:)=[]

dA=diff(A,1,2)

[I,J]=find(dA==0)

A(I,:)=[]

 s = input('任意输入册信返伏n个不重复的整数序列(如:12,13,15,1)\n','s')

A = str2num(s)

m = length(A)

id = perms(1:m)

R = A(id)

任意输入n个不重州世轮复的整数序列(如:12,13,15,1)

5,12,1

R =

   1    12     5

   1     5    12

  12     1     5

  12     5     1

   5    12     1

   5     1    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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8244369.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存