排列组合算法
#include <stdio.h>int n = 0;void swap(int *a, int *b) { int m; m = *a; *a = *b; *b = m; }void perm(int list[], int k, int m) { int i; if(k > m) { for(i = 0; i <= m; i++) printf("%d ", list); printf("\n"); n++; } else { for(i = k; i <= m; i++) {//交换i和k的值 swap(&list, &list); perm(list, k + 1, m); //交换i和k的值,使数组还原 swap(&list, &list); } } } int main() { int list[] = {1, 2, 3, 4}; perm(list, 0, 3); printf("total:%d\n", n); return 0; }
页:
[1]