![](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 · 440 阅读 · 0 评论 -
生成可重集的排列
看了刘大大的还是有点不太懂,先记下来慢慢消化。#include#includeusing 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 · 175 阅读 · 0 评论 -
对于字典序排列的进一步简化
首先感谢刘大大;字典序排列的下一个排列仅仅比上一个排列大一点点。可以用STL中的next_permutation解决(不管是1~n还是可重复排列都适用)#include#includeusing 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 · 153 阅读 · 0 评论 -
运用二进制生成集合的所有子集
感谢刘大大;#include#include#includeusing 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 · 1068 阅读 · 0 评论