<>题目:

<>AC代码:
#include <iostream> #include <algorithm> using namespace std; int n; const int
N= 16; int st[N]; int path[N]; void dfs(int u) { if (u == n) //
当从0开始的时候,其实第一层是不管的,因此 { // 终止条件就是当 u = n 的时候 for (int i = 0; i < n; i ++) if (st
[i] == 1) cout << path[i] << " "; cout << endl; return ; } // 选择这个位置的数 path[u] =
u+ 1; // 存路径数组 st[u] = 1; // 1表示选择这个数 dfs(u + 1); // 恢复现场 path[u] = 0; st[u] =
0; // 0表示这一层还没有被选过 // 不选择这个数 st[u] = 2; dfs(u + 1); } int main() { cin >> n; dfs
(0); // 我们先研究有几棵dfs树,很显然,这里只有一棵树 return 0; } // 易理解版本 #include <iostream> #
include <algorithm> #include <vector> using namespace std; const int N = 16; int
n; int st[N]; vector<vector<int>> ways; void dfs(int u) { if (u == n + 1) {
vector<int> way; for (int i = 1; i <= n; i ++) if (st[i] == 1) // 如果这一层被选择过 way.
push_back(i); ways.push_back(way); // 注意将每棵树存进一个大的vector中 return ; } st[u] = 2;
// 不选择 dfs(u + 1); st[u] = 0; st[u] = 1; // 选择 dfs(u + 1); st[u] = 0; } int main
() { cin >> n; dfs(1); for (int i = 0; i < ways.size(); i ++) //
我们用一个vector来存有几棵dfs树 { for (int j = 0; j < ways[i].size(); j ++)// 每棵树的路径 cout
<< ways[i][j] << " "; cout << endl; } return 0; }
<>补充:

1、由数据范围反推时间复杂度

*
2、常见需要记忆数字
2 10 = 1000000 2^{10} = 1000000 210=1000000 10万

2 16 = 25536 2^{16} = 25536 216=25536

2 15 = 32768 2^{15} = 32768 215=32768

2 63 = 1000 万 ( 1 0 8 ) 2^{63} = 1000万 (10 ^ 8 ) 263=1000万(108)

*
3、最常见的四个头文件
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm>
using namespace std;

技术
©2019-2020 Toolsou All rights reserved,
C语言——qsort函数CSS实现溢出显示省略号网络层协议——ICMP协议C语言小游戏-俄罗斯方块Qt入门教程【基础控件篇】QCalendarWidget日历控件用python来控制wifi连接vue中input框只能输入数字Python内置函数C语言数据结构-顺序表删除重复V2.0.0abaqus质量缩放系数取值_ABAQUS的质量缩放