若多个数值不等,则可以直接通过递归进行枚举,从左到右考虑每个数在当前前缀中是否使用过,使用过的话就跳过,没使用过就放入前缀进行下一次递归
#include<bits/stdc++.h> using namespace std; const int maxN=10000; int N; vector<int> all; vector<int> premutation; bool vis[maxN]; void printPremutation(){ if(premutation.size()==all.size()){ for(int i=0;i<premutation.size();i++)cout<<premutation[i]<<‘ ‘; cout<<endl; return; } for(int i=0;i<N;i++)if(!vis[i]){ vis[i]=true; premutation.push_back(all[i]); printPremutation(); premutation.pop_back(); vis[i]=false; } } int main(){ for(int i=1;i<=5;i++)all.push_back(i); memset(vis,0,sizeof(vis)); N=5; printPremutation(); system("pause"); }