全排列

10 分钟

回溯法能列出所有排列。用 used[] 记录哪些数已用,每一层从没用过的数里挑一个放进当前位置,放满就输出,返回时撤销选择再试下一个:void dfs(int k){ if(k==n){print();return;} for(int i=1;i<=n;i++) if(!used[i]){ used[i]=1; a[k]=i; dfs(k+1); used[i]=0; } }

小纸条

3 个不同数字一共有几种排列?

登录 后可看答案

全排列 · 算法进阶 · op599 课程