非递归实现输出全排列(或部分排列)

来源:互联网 发布:百度知道和知乎 编辑:程序博客网 时间:2024/06/06 14:24
平时输出排列我们几乎都是使用递归的方式,这样思维清晰也容易写,但最近心血来潮写了个非递归的排列方式。代码如下
#include <iostream>#include<algorithm>#include<cstdio>#include<string>#include<map>#include<vector>using namespace std;int level;int a[10];//bool visited[10];int n,m;int main() { cin>>n>>m; int *a=new int[m]; bool *visited=new bool[m]; level=0; for(int i=0;i<m;i++) a[i]=-1; while(1) { int minn=-1; for(int i=0;i<m;i++) if(!visited[i]&&i>a[level]) { minn=i; break; } if(minn==-1) { if(level==0) break; visited[a[level]]=false; a[level]=-1; level--; continue; } else { if(a[level]!=-1) visited[a[level]]=false; a[level]=minn; visited[a[level]]=true; level++; } if(level==n) { for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; level--; } } return 0;}
其中n为输出个数,m为数字个数,当然大于十时,输出不是很好看。
0 0