说起排列组合,它们在古典概率论和组合数学中应用十分广泛,大家可能也比较熟悉,在高中阶段就已经接触过它们了。这篇文章从编程的角度出发,使用DFS实现它们。
排列
排列,是指从给定个数的元素中取出指定个数的元素进行排序。
问题:给定一个数n,在[1,n]中选m个数,按字典序输出所有排列。
DFS代码:
#include <bits/stdc++.h>
using namespace std;
int m,n;//与题目中的n,m意义一致
vector<int>ans;//存储答案
vector<bool>vis;//保证搜索过的点不再重复搜索(排列数不能重复)
void permutation(){
if (ans.size()==m){
//答案符合要求直接输出
for (int i = 0; i < m; ++i) {
cout<<ans[i]<<' ';
}
cout<<endl;
return;//打印完后退出递归
}
for (int i = 1; i <= n; ++i) {
if (!vis[i]){
ans.push_back(i);//添加答案