基本思想 数据结构 空间
DFS 一下子搜到底,然后再回溯 stack O(h) 与树高成正比 不具有最短性
BFS 每次搜一层 queue O(2h) 2h是节点的个数,最坏情况就是全存 如果权重是1,则可以搜出“最短路”

DFS

回溯和剪枝
空间复杂度是O(h),因为每次都是只存一个分支,不是存一整棵数,回溯后就删除存的分支,重新存新的分支
模板题:全排列

  1. #include <iostream>
  2. using namespace std;
  3. const int N = 10;
  4. int n;
  5. int path[N];
  6. bool st[N];
  7. void dfs(int u)
  8. {
  9. if(u==n)
  10. {
  11. for(int i = 0;i < n;i++) cout<<path[i]<<" ";
  12. puts("");
  13. return;
  14. }
  15. for(int i = 1;i<=n;i++)
  16. {
  17. if(!st[i])
  18. {
  19. path[u] = i;
  20. st[i] = true;
  21. dfs(u+1);
  22. st[i]=false;
  23. }
  24. }
  25. }
  26. int main()
  27. {
  28. cin>>n;
  29. dfs(0);
  30. return 0;
  31. }

BFS

每次搜一层