今天发现又忘记了,所以在写一遍并发个题解记录
1-全排列
842. 排列数字 - AcWing题库
#include<iostream>
using namespace std;int n;
const int N = 10;
int st[N];
int path[N];void dfs(int u){if(u == n + 1){for(int i = 1;i <= n;i++){cout << path[i] << " ";}cout << endl;return;}if(u > n ) return;for(int i = 1;i <= n;i++){if(!st[i]){st[i] = true;path[u] = i;dfs(u + 1);st[i] = false;}}
}int main(){cin >> n;dfs(1);return 0;
}
2-组合
P1157 组合的输出 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
组合与排列不同的是组合对于同一种选择,只需要输出一次,不用输出不同顺序,因此每次dfs只需要从上一个数字后进行处理
#include<iostream>
#include<algorithm>
#include<cmath>
#include<iomanip>
using namespace std;int n,r;
const int N = 22;
int path[N];void dfs(int index){if(index == r){for(int i = 0;i < r;i++ ){cout << setw(3) << path[i];}cout << endl;return;}if(index > r) return;for(int i = path[index - 1] + 1;i <= n;i++){path[index] = i;dfs(index + 1);}
}int main() {cin >> n >> r;dfs(0);return 0;
}