1317:[例5.2]深入搜索组合的输出,寻找问题解决方案。
1317:【例5.2】组合的输出
时间限制: 1000毫秒内存限制: 65536 KB。
提交编号: 24255通过编号: 11944。
【题目描述】
排列组合是常用的数学方法,其中组合是从n个元素中提取r个元素(无序且rn)。我们可以简单地把n个元素理解为自然数1,2,…,n,并从中取任意数量的r。
现在你需要递归地输出所有的组合。
例如,n=5,r=3,所有组合为:
1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5
#includebits/stdc。h
使用命名空间标准;
const int N=25
int n,r;
int路径[N];//保存路径。
布尔街;//保存是否选择了该号码。
void DFS(int x){ 0
If(x==r 1)//路径结束。
{
for(int I=1;I=r;I )//输出你的路径。
coutsetw(3)路径[I];
coutendl
返回;
}
for(int I=1;I=n;I )//找出路径中存在的正确数字。
{
if(ipath[x-1]!St[i])//大于前一个数字,尚未被选中。
{
路径[x]=I;
ST[I]=1;
外勤部(x1);//递归实现DFS。
ST[I]=0;//实现后,当前位未被选中,因此被清零。
}
}
}
int main()
{
cinnr
外勤部(1);
返回0;
}
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/62064.html