我想通过对两个DFS例子的剖析,来加深自己对DFS的学习和理解,有错误之处,不吝指教。
1. 组合
组合DFS的代码来自:https://blog.csdn.net/Mr_Zhangmc/article/details/81940805
组合的题目如下:(题目来自codeup:ID:100000608,问题B)略有改动(去除非递归要求)
排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r < = n),我们可以简单地将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
#include<iostream>
using namespace std;
const int Max=100;
int n,r;
int num[Max]={
0};
//当达到边界时,
void DFS(int index,int count){
//没啥含义,只是为了更好的解析
cout<<"**"<<index<<" "<<count<<" "<<endl;
//记录
num[count]=index;
//边界,当有r个元素的时候,已到边界值
if(count==r){
//从num[1]~num[r]是暂存的数据
for(int i=1;i<=r;i++){
cout<<num[i]<<" ";
}
cout<<endl;
return