TB椰程 TypeBuddy 打字搭子

DFS · 全排列

CSP-J · 编程模板 · 代码 · cpp · 难度 4/5 · 共 557 字

逐位试填,used 标记后回溯

  • 深搜
  • 回溯

前置内容

正文

// ── 深搜(DFS)求全排列 ──
// 一层填一个位置:
// 选一个没用过的数,
// 走到底再回头
int used[10], p[10];
// used=选过没;p=当前排列
void dfs(int step, int n) {
    if (step > n) {
        // 全填完 → 输出一组解
        for (int i = 1; i <= n; i++)
            printf("%d ", p[i]);
        printf("\n");
        return;
    }
    for (int i = 1; i <= n; i++) {
        // 剪枝:用过的数跳过
        if (used[i]) continue;
        // 做选择
        used[i] = 1;
        p[step] = i;
        // 进入下一层
        dfs(step + 1, n);
        // 撤销选择 —— 回溯的关键!
        used[i] = 0;
    }
}
// 回溯口诀:递归前后状态要对称
// 进时改了什么,退时就还原

CSP-J · 编程模板的其它内容

打字首页 · 词库画廊 · 编程打字 · 指法入门 · 天梯榜 · 数据分析 · 班级课堂 · 关于我们
椰程 TypeBuddy 打字搭子 —— 键盘指法练习 · 单词记忆 · 班级课堂 · 在线 PK