/*
解答树:
以下的树显示了排列递归函数的调用过程。
(****)
(1***)                         (2***)                          (3***)                       (4***)
(12**)    (13**)   (14**)    (21**)  (23**)(24**)         (31**)  (32**)   (34**)        (41**)  (42**)   (43**)
(123*)(124*)
(1234)
特点:
第0层有n个儿子,第一层各节点各有n-1个儿子,第二层各有n-2个儿子,第n层节点没有儿子。每个叶子对应一个排列,共有n!个叶子。这棵树展示的是:
从什么都没做到逐步生成完整解的过程。
解答树特点:多步骤,多选择,用递归
0层:1个节点,1层:n个节点,2层:n*(n-1),第3层:n*(n-1)*(n-2),第n层:n*(n-1)*(n-2)*(n-3)*...*1 = n!个节点。
T(n) =
多数情况下:解答树上所有节点来源于最后一两层
下一个排列:
枚举所有排列新方法:从字典序最小排列开始,不停调用"求下一个排列"的过程,用C++库函数next_permutation
输入:
3 2 1
1 1 1
输出:
(1,2,3)、(1,3,2)、(2,1,3)、(2,3,1)、(3,1,2),
(3,2,1)。
1 1 1
*/
/*
关键:
1       sort(iArr,iArr+n);//调用下一个排列之前必须确保当前排列排序过
do{
for(int k = 0 ; k < n ; k++)//等于对于每个元素,输出以其为首的排列。这里调用第一个循环,就是输出最小排列
{
//printf("%d",iArr[k]);
printf("%d ",iArr[k]);
}
puts("\n");
}while(next_permutation(iArr,iArr+n));//下一个排列不为空
2 这里用do while循环的意思是:如果先用while循环,直接漏掉了最小的排列。
*/
#include <stdio.h>
#include <algorithm>
#define MAXSIZE 1024
using namespace std;
void genPermutation()
{
int n;
while(EOF != scanf("%d",&n))
{
int iArr[MAXSIZE];
for(int i = 0 ; i < n ; i++)
{
scanf("%d",&iArr[i]);
}
sort(iArr,iArr+n);//调用下一个排列之前必须确保当前排列排序过
do{
for(int k = 0 ; k < n ; k++)//等于对于每个元素,输出以其为首的排列。这里调用第一个循环,就是输出最小排列
{
//printf("%d",iArr[k]);
printf("%d ",iArr[k]);
}
puts("\n");
}while(next_permutation(iArr,iArr+n));//下一个排列不为空
}
}
int main(int argc,char* argv[])
{
genPermutation();
system("pause");
return 0;
}

算法竞赛入门经典:第七章 暴力求解法 7.7解答树相关推荐

  1. 算法竞赛入门经典 第七章 总结

    目录: 7.1 简单枚举 7.2 枚举排列 7.3 子集生成 7.1 简单枚举 例题7-1 除法(Division, UVa 725) 输入正整数n,按从小到大的顺序输出所有形如abcde/fghij ...

  2. 算法竞赛入门经典第3章

    3.1数组 数组较大 比较大的数组尽量声明在main函数外,否则程序可能无法进行. 数组操作 如果要从数组a复制k个元素到数组b,可以这样做:memcpy(b,a,sizeof(int)*k).  如 ...

  3. 《算法竞赛入门经典》 第二章 循环结构程序设计 习题

    注:这里为了便于测试,直接使用stdin,stdout进行输出,没有进行文件读写操作. 习题2-1 位数(digit) 输入一个不超过10^9的正整数,输出它的位数.例如12735的位数是5.请不要使 ...

  4. 《算法竞赛入门经典》第一章1.5

    1.5.4 问题1 问题2 问题3 问题4 问题5  最邻近的else 转载于:https://www.cnblogs.com/LzKlyhPorter/p/4185828.html

  5. 算法竞赛入门经典 第五章总结1

    例题1: 输入多行数据,每行包含若干个以空格隔开的整数,输出每行中所有整数之和 #include<iostream> #include<string> #include< ...

  6. 算法竞赛入门经典第六章(例题) B - Rails(涉及到栈的运用)

    题目:B - Rails 原题链接:https://cn.vjudge.net/contest...: 题目大意:先输入一个表示火车的节数,火车原本是按从1到n的顺序,但是一起进的还是分开进的是不一定 ...

  7. 刘汝佳算法竞赛入门经典第三章习题

    /*给出一些容易理解的解题方法  但是没有oj评测 所以无法保证一定正确  矩阵的旋转给出了左旋和右旋 不确定题目3-5是哪一种*/ 习题3-1分数统计(stat) 输入一些学生的分数,哪个分数出现的 ...

  8. 《算法竞赛入门经典》第一章习题答案

    习题1-1 平均数(average) 输入3个整数,输出它们的平均值,保留3位小数. #include <stdio.h> int main() { int a,b,c; scanf(&q ...

  9. 算法竞赛入门经典第4章 【uvaoj习题(一)】

    题目合集 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94 uva100 ...

最新文章

  1. 十分钟搞懂什么是CGI
  2. ArrayBlockingQueue原理分析-dequeue方法
  3. NETSTAT 指令详解
  4. bootstrap 学习 ---css样式学习
  5. 删除的时候提示“该项目不在C:\User\桌面 中
  6. Word2Vec算法详解(CBOW和skip-gram算法详解)
  7. linux set 39 date 39,Linux date命令
  8. 实验二.常用网络命令
  9. 高以翔死因曝光!猝死前最后4分钟,他本还有一次活的机会...
  10. WebRTC NACK
  11. mand-mobile-rn 多 Android Module link 实现
  12. mysql查询每门课程成绩最好的前两名学生id和姓名
  13. oracle grid的概念和asm的配置
  14. NOI2020后记,以及其它
  15. gzip 与 deflate :gzip算法原理深入分析
  16. 浪潮计算机云计算,孙丕恕和他的云计算:浪潮是最中坚的力量
  17. 阿里AI天池大赛-二手车交易价格预测-回归算法与模型融合
  18. 《音视频直播------总体概述》
  19. 在东软正式培训的第一周
  20. 现代物流不可或缺的EDI系统

热门文章

  1. Flickr公布2016最受欢迎照片
  2. 每周推荐短视频:企业学校与用户如何参与开源生态建设?
  3. SpringBoot文件上传下载以及优化过程 -- 个人笔记
  4. 用JASS简单修改魔兽争霸地图
  5. 世上无难事,只要肯攀登
  6. 什么是BEPI认证?
  7. “你当然是个胆小鬼。”昆仑叶哲华骄傲地说道
  8. Spring Cloud Eureka整合 Seata 实现分布式事务
  9. 程序员面试中,有些问题要这样答
  10. adonis视图——nodejs应用第一季04