回溯法解决,每一层枚举没选过的数字进下一层,再回溯
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include <iostream> #include <vector> #include <cstdio> using namespace std;
int n; vector<int> v;
void dfs(int d,int state){ if(d==n){ for(auto a:v) printf("%d ",a); printf("\n"); } for(int i=0;i<n;i++) if(!(state&(1<<i))){ v.push_back(i+1); dfs(d+1,state|1<<i); v.pop_back(); } }
int main(){ while(~scanf("%d",&n)){ v.clear(); dfs(0,0); } return 0; }
|