从今天开始, 花两个星期做一些搜索题。
#include <cstdio>
#include <cstring>
int a[15], b[10], vis[15];
int k, t=0;
void dfs(int n)
{
if(n == 7)
{
for(int i=1; i<=5; i++)
printf("%d ", b[i]);
printf("%d\n", b[6]);
return;
}
for(int i=1; i<=k; i++)
if(!vis[i] & a[i]>b[n-1])
{
vis[i] = 1;
b[n] = a[i];
dfs(n+1);
vis[i] = 0;
}
}
int main()
{
while(scanf("%d", &k), k)
{
if(t++)
printf("\n");
for(int i=1; i<=k; i++)
scanf("%d", &a[i]);
memset(vis, 0, sizeof(vis));
dfs(1);
}
return 0;
}

本文介绍了一个使用深度优先搜索(DFS)算法解决特定组合问题的C++实现。该程序通过递归调用自身来枚举所有可能的组合,并打印出满足特定条件的解。具体而言,它寻找长度为7的递增整数序列。
146

被折叠的 条评论
为什么被折叠?



