//dfs深度优先,输出0 1 2的全排列
#include <iostream>
#include<vector>
using namespace std;
//标记是否被访问过了
vector<bool> visit(3, false);
//存储已经拍好的顺序
vector<int> arry(3, 0);
void dfs(int num)
{
if (num == 3) {
for (auto &elem : arry) {
cout<<elem<<" ";
}
cout<<endl;
return;
}
//一次for循环是一个深度搜索
for (int i = 0; i < 3; ++i) {
if (visit[i] == false) {
//每一次新的for循环其实num都是从0开始的
//数据会覆盖上一个深度搜索的数据
arry[num] = i;
visit[i] = true;
//当第一个深度搜索结束时,意味着排列出了一个组合,
//然后++i,再进行第二次深度搜索。
dfs(num + 1);//这里不能用++num,因为dfs退出后,还要执行for循环的下一次循环
//第二次深度搜索是一个全新的排列,所以要把上一次的标志位清零,从新开始计算
visit[i] = false;
}
}
}
int main()
{
dfs(0);
return 0;
}
输出: