| 基本思想 | 数据结构 | 空间 | ||
|---|---|---|---|---|
| DFS | 一下子搜到底,然后再回溯 | stack | O(h) 与树高成正比 | 不具有最短性 |
| BFS | 每次搜一层 | queue | O(2h) 2h是节点的个数,最坏情况就是全存 | 如果权重是1,则可以搜出“最短路” |
DFS
回溯和剪枝
空间复杂度是O(h),因为每次都是只存一个分支,不是存一整棵数,回溯后就删除存的分支,重新存新的分支
模板题:全排列
#include <iostream>using namespace std;const int N = 10;int n;int path[N];bool st[N];void dfs(int u){if(u==n){for(int i = 0;i < n;i++) cout<<path[i]<<" ";puts("");return;}for(int i = 1;i<=n;i++){if(!st[i]){path[u] = i;st[i] = true;dfs(u+1);st[i]=false;}}}int main(){cin>>n;dfs(0);return 0;}
BFS
每次搜一层
