蓝桥杯|蓝桥杯——1.2递归实现排列型枚举

题目描述:
【蓝桥杯|蓝桥杯——1.2递归实现排列型枚举】蓝桥杯|蓝桥杯——1.2递归实现排列型枚举
文章图片

AC代码

#include #include using namespace std; int n; const int N = 10; int path[N]; bool st[N]; void dfs(int u) { if (u == n + 1)// 递归终止的条件 { for (int i = 1; i <= n; i ++) cout << path[i] << " "; cout << endl; }for (int i = 1; i <= n; i ++)// 遍历每一个数字 { if (!st[i])// 如果这个数字没有被用过 { // 选择这个数字 path[u] = i; st[i] = 1; dfs(u + 1); // 恢复现场 path[u] = 0; st[i] = 0; //不选,不选的情况下,应该是不执行任何操作 //dfs(u + 1); } } }int main() { cin >> n; /* 如果只是看题干的话,好像有n棵树,但是 由于下一棵树和上一棵树有联系,因此,我 们还是选择使用一棵树。而对于与上一棵树 的联系,我们选择使用一个数组来进行标记 一个数是否被用过 */dfs(1); // 我们仍然选择从1开始return 0; }

    推荐阅读