dfs深度搜索全排列图解详细步骤(图解版)
在初学dfs深度搜索的时候,会经常看到如下场景:
int main() { cin >> N; dfs(1); return 0; }
看到这个的时候,我整个人就迷惑了:只有一个dfs(1)? 为什么是dfs(1),而不是dfs(N)??dfs究竟是什么在递归?
为了解决这些疑惑,我按着全排列的代码画了个图。现在也算是明白了。
这幅图是帮助初学dfs深度搜索的朋友,更好的明白dfs执行的过程。
我把dfs在执行的时候,进行了什么操作,执行了哪一步都详细的做了图解,方便更好的理解dfs
本图以3 的全排列为例:
123 ,132 ,213 ,231, 312, 321

X-mind源文件有需要评论区d一声
下面是全排列的代码,是可以直接编译滴。
/* Project: full permutation(全排列) Date: 2020/09/22 Author: Frank Yu */ #include<iostream> #include<iomanip> #define Max 10 using namespace std; int N; //层数 int vis[Max]; int nums[Max]; void print() { for (int i = 1; i <= N; ++i) { cout << setw(5)<< nums[i]; } cout << endl; } void dfs(int n) { if (n > N) print(); else { //选择数字 for (int i = 1; i <= N; ++i) { if (!vis[i]) { nums[n] = i; vis[i] = 1; dfs(n + 1); // 回溯 忘记曾达到n+1层,操作撤销 nums会覆盖,不必撤销 vis[i] = 0; } } } } int main() { cin >> N; // 从第1层开始搜索 dfs(1); return 0; }
友友们下次见!

浙公网安备 33010602011771号