ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

7.2.3 解答树

2022-01-30 16:04:43  阅读:139  来源: 互联网

标签:结点 int next 7.2 枚举 permutation 解答


7.2.3 解答树
这棵树的第0层有n个子节点,第1层有(n-1)个子结点,第二层有(n-2)个子节点,...,第n层就没有子节点了,即第n层的结点都是叶子结点,总共有n!个结点
由于这棵树是从无到有逐渐生成完整解的过程,因此将其称为解答树
如果某问题的解可以由多个步骤得到,而每个步骤都有若干种选择(这些候选方案集可能会依赖与先前做出的选择),且可以用递归枚举方法实现,则它的工作方式可以用解答树描述
注意对于上述的解答树的节点个数主要是和最后两层的结点数n!有关,即大多数情况下解答树上的结点几乎全部来源于最后一两层

7.2.4 下一个排列

点击查看代码
#include<cstdio>
#include<algorithm>//include next_permutation
using namespace std;

int main() {
  int n, p[10];
  scanf("%d", &n);
  for(int i = 0; i < n; i++) scanf("%d", &p[i]);
  sort(p, p+n);
  do {
  	for(int i = 0; i < n; i++) printf("%d ", p[i]);
  	printf("\n");
  } while(next_permutation(p, p+n));
  return 0;
} 

枚举排列的常见方法有两种:一是递归枚举,二是用STL中的next_permutation
next_permutation的返回值是bool类型的,同时true的含义是可以返回一个比之前的序列尽可能小的一个序列,然后如果不可以返回比之前的序列还要小的序列返回值就是false
这个函数可以减轻手写全排的麻烦,注意next_permutation同时可以适用于可重集的排列
枚举所有排列的另一个方法就是从字典序最小排列开始,不停调用求下一个排列的过程

标签:结点,int,next,7.2,枚举,permutation,解答
来源: https://www.cnblogs.com/FlnButFly/p/15856980.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有