Я пытаюсь преобразовать часть своей функции в Matlab в С++ с помощью кодера. Coder не поддерживает функцию perms
. Я широко использую perms
в своем коде. После поиска в Интернете я нашел несколько предложений о том, как создать список всех перестановок без perms
, но это делается «вручную», что означает, что для перестановок с 3 элементами у нас есть три цикла for, с 4 элементами у нас есть 4 цикла и т. д.
Пример для 1:4
:
row = 1;
n=a;
Z = zeros(factorial(n),n);
idxarray1=[1:4];
for idx=idxarray1
idxarray2=idxarray1(find(idxarray1~=idx)) ;
for jdx=idxarray2
idxarray3=idxarray2(find(idxarray2~=jdx));
for kdx=idxarray3
idxarray4=idxarray3(find(idxarray3~=kdx)) ;
for mdx=idxarray4
Z(row,:) = [idx,jdx,kdx,mdx];
row = row + 1 ;
end
end
end
end
Для 8 элементов мне пришлось бы написать 8 циклов for, какие-либо предложения о том, как я могу преобразовать это для n элементов? Что-то типа
for i=n:-1:1
I=[1:n] ;
for j=1:i
J=I(find(I~=j));
... ?
thank you
std::next_permutation
- person 101010   schedule 29.05.2016