#include<bits/stdc++.h> using namespace std; int n,a[15],b;//n:一共的数字(1~n) a[]:结果 b:记录排列方法总数 bool f[10]={0};//f[]:记录当前数字是否被使用过 void dfs(int dp){ int i; if(dp == n+1){ for(i=1;i<=n;i++) cout<<a[i]<<" ";//打印结果 b++;//方法加一 cout<<endl; return;//返回上一次调用此函数的地方 } for(i=1;i<=n;i++){//每个 if(f[i] == 0){ a[dp] = i; f[i] = 1; dfs(dp+1); f[i] = 0; } } } int main(){ cin>>n; dfs(1); cout<<b; }
#include<bits/stdc++.h> using namespace std; int n,a[25],r; void dfs(int dp){ int i; if(dp == r+1){ for(i=1;i<=r;i++) cout<<setw(3)<<a[i]<<" "; cout<<endl; return; } for(i=a[dp-1]+1;i<=n;i++){ a[dp] = i; dfs(dp+1); } } int main(){ cin>>n>>r; dfs(1); }
#include<bits/stdc++.h> using namespace std; int n,a[10],b; void dfs(int dp){ int i; if(dp == n+1){ for(i=1;i<=n;i++) cout<<a[i]<<" "; b++; cout<<endl; return; } for(i=1;i<=n;i++){ a[dp] = i; dfs(dp+1); } } int main(){ cin>>n; dfs(1); cout<<b; }