问题描述:
给定正整数n(>=2),求从1~n的全排列。
求解:
这个问题与0/1背包以及幂集问题的增量枚举解法很类似,甚至还更简单。
利用增量枚举法,利用向量vector便于动态插入。
初始vector中只有{1},向{1}的两个位置插入2得到其中一个集合{1,2},再对这个集合的三个位置插入3得到其中一个集合{1,2,3},全部的情况可以画成一颗数。

代码:
这里的插入函数insert()有个很有意思的巧合,那就是需要插入的数字n,这是数字是多少,那么当前集合就有几个待插入的空位置,比如插入2,那么{1}就有两个插入位置,形成{1,2}和{2,1}。
#include<stdio.h>
#include<iostream>
#include<vector>
using namespace std;
void insert(vector<int>s,int n,vector<ve


521

被折叠的 条评论
为什么被折叠?



