回溯之数字组合问题

 

#include<iostream>
#include<vector>
#include<map>
#include<string>
using namespace std;
vector<vector<int>> res;
bool b[100] = { 0 };
class solution
{
public:
	void test(int n, int k)
	{
		vector<int> v;
		dfs(v, n, 1, k);
	}
private:
	void dfs(vector<int> &v, int n, int index,int k)
	{
		if (v.size() == k)
		{
			res.push_back(v);
			return;
		}
		for (int i = 1; i <= n; i++)
		{
			if (!b[i])
			{
				v.push_back(i);
				b[i] = 1;
				dfs(v, n, index + 1,k);
				b[i] = 0;
				v.pop_back();
			}
		}
	}
};
int main()
{
	int n = 5,k=3;
	class solution a;
	a.test(n,k);
	for (int i = 0; i < res.size(); i++)
	{
		for (int j = 0; j < res[i].size(); j++)
			cout << res[i][j] << " ";
		cout << endl;
	}
	system("pause");
	return 0;
}
发布了98 篇原创文章 · 获赞 1 · 访问量 4494

猜你喜欢

转载自blog.csdn.net/weixin_40823740/article/details/103325223