数组中任意n个数的全排列(DFS)以及任意n个数的组合
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100 /* 求数组中任意n个数的全排列 */ int result[MAX] = {0}; int count = 0; int visited[MAX] = {0}; void dfs(int *a, int size, int num, int n) { if (num == n) { for (int i = 0; i < count; i++) { printf("%d", result[i]); } printf(" "); return; } else { for (int i=0; i < size; i++) { if (visited[i] == 0) { result[count++] = a[i]; visited[i] = 1; dfs(a, size, num+1, n); visited[i] = 0; count--; } } } } int main() { int n; int a[10] = {0,1,2,3,4,5,6,7,8,9}; scanf("%d", &n); dfs(a, 10,0, n); return 0; }
代码比较简单,不做多余解释