![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法入门经典
Minorui
我希望每个人都能以各自的形态,自由生活。而不是千方百计把自己塞进方方正正的模具,压缩成同样形状的罐头。我希望当我年老之后,不会再深夜入睡时,枕头里装满了发霉的梦!
展开
-
关于1~n排序问题
我开始不会,多看了刘大大的数书几遍后,领悟一点。 大致的思路是: 拿 1 2 3 为例 把每一个数都做为排头一次后面的数开始变化排列, 比如 1为排头, 2 3 排列。 易知 2可作为当前的排头,后面的数依次是这样、 还没完 这才1刚刚结束 即一层递归结束。 后面的就重复上述步骤即可。 #include using namespace std; void print_permut原创 2017-07-21 15:52:36 · 464 阅读 · 0 评论 -
生成可重集的排列
看了刘大大的还是有点不太懂,先记下来慢慢消化。 #include #include using namespace std; void print_permutation(int n, int* p ,int* a,int cur) { if(cur == n){ for(int i=0 ;i<n;i++) printf("%d",a[i]); printf("\n"); } el转载 2017-07-21 17:03:44 · 180 阅读 · 0 评论 -
对于字典序排列的进一步简化
首先感谢刘大大; 字典序排列的下一个排列仅仅比上一个排列大一点点。可以用STL中的next_permutation解决(不管是1~n还是可重复排列都适用) #include #include using namespace std; int main(){ int n; cin>>n; int p[10]; for(int i=0;i<n;i++) { cin>>p[i转载 2017-07-22 09:02:57 · 160 阅读 · 0 评论 -
运用二进制生成集合的所有子集
感谢刘大大; #include #include #include using namespace std; void print_subset(int n,int s){ for(int i=0;i<n;i++) if(s&(1<<i)) printf("%d",i); cout<<endl; } int main(){ int s[4]={0,1,2,3}; for转载 2017-07-22 10:52:09 · 1100 阅读 · 0 评论