您的位置:首页 > 其它

ZOJ-1089

2014-02-13 21:59 288 查看
用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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: