std 標準竟然有兩個用來計算排列組合關係的算法,分別是next_permutation和prev_permutation
#include <bits/stdc++.h> using namespace std; #define ll long long #define ull unsigned long long int main(int argc, char const *argv[]) { char a[8] = {'1','2','3','4','5','6','7','8'}; do{ for(int i = 0;i < 7;i ++) { printf("%c",a[i]); printf(" "); } printf("%c\n", a[7]); }while(next_permutation(a,a + 8)); return 0; }
記錄一下dfs 版本
#include<iostream> using namespace std; const int N =501; typedef long long ll ; #define f(i,l,r) for(int i=l;i<=r;++i) #define g(i,l,r) for(int i=l;i>=r;--i) int vis[N],a[N]; int m =8; void dfs(int n ) { if(n==m){ f(i,1,m-1)cout<<a[i]<<" "; cout<<a[n]<<endl; } n++; f(i,1,m) { if(vis[i])continue; vis[i]=1; a[n]=i; dfs(n); vis[i]=0; } } int main(){ dfs(0); return 0; }