全排列(回溯法与next_permutation)

匿名 (未验证) 提交于 2019-12-02 23:26:52
版权声明:即使允许了也不得转载 https://blog.csdn.net/weixin_43213056/article/details/88756200

深度搜索模板的套路:
先判断是否达到目标状态
如果达到,判断当前状态是否合法是否计入答案。
未达到,枚举可能的状态,记录本轮选择,进入下一层。
返回后,消除影响。

全排列(DFS)

#include <iostream> using namespace std; int n, a[100], vis[100], t; void dfs(int cur) { 	if (cur == n + 1) 	{ 		for (int k = 1; k <= n; k++) 			cout << a[k]; 		cout << endl; 		t++; 		return; 	} 	else 	{ 		for (int i = 1; i <= n; i++) 		{ 			if (vis[i] == 0) 			{ 				a[cur] = i; 				vis[i] = 1; 				dfs(cur + 1); 				vis[i] = 0; 			} 		} 	} } int main() { 	cin >> n; 	dfs(1); 	cout << "Total=" << t; 	return 0; }

运行结果:

next_permutation方法:

#include <iostream> #include <algorithm> using namespace std; int a[3] = { 1,2,3 }; int main() { 	do 	{ 		cout << a[0] << " " << a[1] << " " << a[2] << endl; 	} while (next_permutation(a, a + 3)); 	return 0; }

运行结果:

文章来源: https://blog.csdn.net/weixin_43213056/article/details/88756200
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!