全排列
来源:互联网 发布:淘宝的膳魔师是真的吗 编辑:程序博客网 时间:2024/04/28 16:37
n排列,按字典顺序输出所以可能
例如输入3
输出
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
非递归
- #include<iostream>
- #include<stdlib.h>
- using namespace std;
- void F(int n){
- int i,j,k,*p=new int[n];
- for(i=0;i<n;i++){
- p[i]=i+1;
- cout<<p[i]<<" ";}
- cout<<endl;
- while(1){
- j=n-2;
- while(j>=0&&p[j]>p[j+1])
- j--;
- if(j<0) break;
- k=n-1;
- while(p[j]>p[k])
- k--;
- p[j]^=p[k]^=p[j]^=p[k];
- i=j+1;
- k=n-1;
- while(i<k){
- p[i]^=p[k]^=p[i]^=p[k];
- i++;
- k--;}
- for(i=0;i<n;i++)
- cout<<p[i]<<" ";
- cout<<endl;}
- }
- int main()
- {
- int n;
- while(cin>>n)
- F(n);
- return 0; }
递归
- #include<iostream>
- #include<stdlib.h>
- using namespace std;
- void Swap(int &a,int &b)
- {
- int temp=a;
- a=b;
- b=temp;
- }
- void perm(int *a,int k,int m)
- {
- if(k==m)
- {
- for(int i=0;i<=m;i++)
- cout<<a[i]<<" ";
- cout<<endl;
- }
- else
- for(int i=k;i<=m;i++)
- {
- Swap(a[k],a[i]);
- perm(a,k+1,m);
- Swap(a[k],a[i]);
- }
- }
- int main()
- {
- int n;
- cin>>n;
- int *a=new int[n];
- for(int i=0;i<n;i++)
- a[i]=i+1;
- perm(a,0,n-1);
- delete[] a;
- return 0;
- }
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 计算两个日期的时间间隔
- ToolStrip动态添加自定义控件
- “我应为王”,比尔盖茨名言--author :邵京国
- 自动分配实例,不像Spring一样需要在配置文件中手工配置类
- DC?设备上下文?怎么翻译的。。。终于弄懂了。
- 全排列
- charindex、PATINDEX
- 颇有启发的一个故事!
- 开发基于 Dojo 的博客阅读器--邵京国
- linux下wine安装成功后运行不了 err:process:init_windows_dirs directory L"C://windows
- 关于临时表和Table表变量的注释
- linux cvs 配置
- 批处理输入密码但不显示字符的代码---分析
- Linux网络编程技术笔记(原创)