【发布时间】:2015-10-30 04:34:21
【问题描述】:
所以我想知道如何编写一个非递归函数来打印给定 N 和 r 的所有排列,其中r^N 为您提供排列的总数。
Example: N = 3, r = 2, total permutations = 8
output:
000
001
010
011
100
101
110
111
这是我尝试过的,但当然它只适用于一种情况:
void perm_iter(int N, int nr_vals){
int pos = N-1;
int i,j,k;
int P_array[N];
for(i=0;i<N;i++){
P_array[i] = 0;
}
int val_array[nr_vals];
for(i=0;i<nr_vals;i++){
val_array[i] = i;
}
do{
for(i=0;i<N;i++){
for(j=0;j<nr_vals;j++){
P_array[pos-1] = val_array[j];
for(k=0;k<nr_vals;k++){
P_array[pos] = val_array[k];
for(i=0;i<N;i++){
printf("%d",P_array[i]);
}
printf("\n");
}
}
pos--;
}
}while(pos > 0);
}
【问题讨论】:
-
一个使用队列很容易。
-
以前从未使用过。我会调查的。谢谢
-
我相信谷歌不会出现在你的世界这一边。无论如何,请查看-codeproject.com/Articles/138934/… 和 bytes.com/topic/c/answers/885226-all-permutations-non-recursive
-
第一篇文章对我来说有点粗略,因为我刚刚学习 Java。我可以关注第二个,但我不能使用 Modulus 并且我试图不使用字符串。感谢您的帮助
-
您需要做的就是数数。
r是基数,N是位数。
标签: c permutation non-recursive