提交时间:2026-02-03 12:16:21
运行 ID: 83875
#include <iostream> #include <vector> using namespace std; int n, k; // 标记数字是否被选中,避免重复选 vector<bool> used; // 存储当前已选的k个元素 vector<int> path; // DFS核心函数 void dfs(int step) { // 1. 终止条件:已选满k个元素,输出结果 if (step == k) { for (int num : path) cout << num << " "; cout << endl; return; } // 2. 选择列表:遍历1~n,选未被使用的数字 for (int i = 1; i <= n; ++i) { if (!used[i]) { // 做选择:标记已用,加入路径 used[i] = true; path.push_back(i); // 递归:进入下一步,选下一个元素 dfs(step + 1); // 回溯:撤销选择,恢复现场(关键!) path.pop_back(); used[i] = false; } } } int main() { cin >> n >> k; // 初始化:used大小n+1(数字1~n,下标从1开始更直观) used.resize(n + 1, false); // 从第0步开始递归(已选0个元素) dfs(0); return 0; }