小弟最近在使用matlab
因為題目的需求
需要使用到全排列組合
而全排列組合的程式碼小弟有找到一個使用遞迴的方式求解
因為小弟在使用窮舉法後仍須取得相關排序
以代入其他程式進行求解
能否請問版上的大大們
是否有較佳的方式可以求解如"迴圈"等方式
謝謝
附上網路找到之matlab程式碼
複製內容到剪貼板
代碼:
clear all;clc;close all;
job_num = 6
n_1 = prod(1:job_num); % 1~job_num的累乘積值
row = n_1;
col = job_num;
allorder_K = zeros(1:job_num-1);
cnt = 0;
period = n_1/1000;
total = 0;
for allorder_m = 1:n_1
allorder_flag=zeros(1,job_num);
allorder_P = zeros(1,job_num);
for allorder_i = 1:job_num-1
position = job_num-allorder_K(allorder_i);
allorder_j = job_num;
while(allorder_j >= position)
if(allorder_flag(allorder_j)==1)
position = position-1;
end
allorder_j =allorder_j-1;
end
allorder_P(position)=job_num+1-allorder_i;
allorder_flag(position)=1;
end
for allorder_i = 1:job_num
if (allorder_flag(allorder_i)==0)
allorder_P(allorder_i)=1;
break;
end
end
%%%%%%%%以下更新k
for allorder_i = 1:job_num-1
allorder_K(job_num-allorder_i)=mod(allorder_K(job_num-allorder_i)+1,allorder_i+1);
if (allorder_K(job_num-allorder_i)~=0)
break;
end
end
%%%下面,可以引用allorder_P進行相關處理
cnt = cnt+1
allorder_P
%--------------------------------------------------------------------------
% for m =1:row
% sort_ind = matrix(m, :);
sort_ind = allorder_P;
%--------------------------------------------------------------------------
end