用DFS求排列组合,感觉写的很丑陋。递归分析实在难啊,需要多练练
#include<stdio.h>
#include<string.h>
void DFS(int depth, int src[], int visit[], int ans[], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
if (!visit[i])
{
if (depth && src[i] < ans[depth - 1])
continue;
visit[i] = 1;
ans[depth] = src[i];
if (depth == 5)
for (j = 0; j < 6; j++)
printf(j == 5 ? "%d\n" : "%d ", ans[j]);
else
DFS(depth + 1, src, visit, ans, n);
visit[i] = 0;
}
}
}
int main()
{
int k, src[13], visit[13], ans[6];
int count = 0;
while (scanf("%d", &k), k)
{
if (count)
putchar('\n');
int i;
for (i = 0; i < k; i++)
scanf("%d", &src[i]);
memset(visit, 0, 13 * sizeof(int));
memset(ans, 0, 6 * sizeof(int));
DFS(0, src, visit, ans, k);
count++;
}
return 0;
}