全排列
#include <iostream> #include <cmath> #include <cstdio> #include <cstring> #include <string> #include <map> #include <iomanip> #include <algorithm> #include <queue> #include <stack> #include <set> #include <vector> //const int maxn = 1e5+5; #define ll long long #define MAX INT_MAX #define FOR(i,a,b) for( int i = a;i <= b;++i) using namespace std; bool b[50]; int v[50],cun[50]; int n,m; void dfs(int k) { if(k==m+1) { for(int i=1;i<=m;++i) { cout<<v[cun[i]]<<" "; if(i==m) { cout<<endl; } } } else { for(int i=1;i<=n;++i) { if(b[i]==1) { b[i]=0; cun[k]=i; dfs(k+1); b[i]=1; } } } } int main() { cin>>n>>m; for(int i=1;i<=n;++i) { cin>>v[i]; b[i]=1; } dfs(1); }
全组合
#include <iostream> #include <cmath> #include <cstdio> #include <cstring> #include <string> #include <map> #include <iomanip> #include <algorithm> #include <queue> #include <stack> #include <set> #include <vector> //const int maxn = 1e5+5; #define ll long long #define MAX INT_MAX #define FOR(i,a,b) for( int i = a;i <= b;++i) using namespace std; bool b[50]; int v[50],cun[50]; int n,m; void dfs(int k) { if(k==m+1) { for(int i=1;i<=m;++i) { cout<<v[cun[i]]<<" "; if(i==m) { cout<<endl; } } } else { for(int i=cun[k-1]+1;i<=n;++i) //唯一的不同 { if(b[i]==1) { b[i]=0; cun[k]=i; dfs(k+1); b[i]=1; } } } } int main() { cin>>n>>m; for(int i=1;i<=n;++i) { cin>>v[i]; b[i]=1; } dfs(1); }
原文地址:https://www.cnblogs.com/jrfr/p/10500916.html
时间: 2024-11-02 00:31:41