1.有n个数,输出其中r(r<=n)个数的所有组合。 #include <iostream> #include <vector> using namespace std; //问题表示 int n=5,r=3; //全局变量 void disppath(vector<int> path) //输出一个组合 { for (int j=0;j<path.size();j++) cout<<" "<<path[j]; cout<<endl; } void dfs(vector<int> path,int i,int num) //求解算法 { if ( ) disppath(path); for (int j=i;j<=n;j++) { path.push_back(j); //选择元素i dfs(path, , ); ; //回溯:不选择元素i } } int main() { vector<int> path; //存放一个解 cout<<"n="<<n<<",r="<<r<<"的所有组合如下:"<<endl; dfs(path,1,0); return 0; }
时间: 2024-03-31 14:37:34 浏览: 18
答案:
这是一道经典的组合问题,可以使用深度优先搜索(DFS)来解决。
在代码中,我们定义了全局变量n和r,表示有n个数,需要输出r个数的所有组合。
然后定义了一个disppath函数,用于输出一个组合;和一个dfs函数,用于求解算法。
在dfs函数中,首先判断当前已经选择的元素个数是否等于r,如果是,则输出当前组合;否则,从i到n中选择一个元素j,将其加入path中,并继续递归调用dfs函数,直到选择的元素个数等于r或者已经选择了n个元素。
最后,在main函数中调用dfs函数,并传入一个空的vector作为初始组合。