搜索
深度优先搜索
- 算法思想:当前限制条件下选择可选选项转移到下一状态,记录现场,依次深入,(暴力遍历每种情况找到最优解)从子状态回溯到当前状态则恢复现场(目的是为了遍历下一状态)
- 代码实现:dfs本身的特性即可利用递归形式实现(状态转移)
- 平凡情况
- 遍历进入子状态
- 恢复现场
广度优先搜索
- 算法思想:权值相同的最短路查找问题,空间复杂度为指数级(存储每一层的所有子节点)
- 代码实现:队列FIFO的特性
树与图的深度优先遍历与广度优先遍历
- 树(连通无环图)与图的存储:
- 邻接矩阵:稠密图
- 邻接表:链表数组模拟
h[N]; //表头数组,指向链表的边
e[M]; //边编号idx,e[idx] = d(idx边的起点为a, 终点为b,ab为邻接节点)
ne[M]; //边idx的下一条边的编号idx‘
//增加边(idex, a, b),将边插入h[a]最近指向的操作:
e[idx] = b;
ne[idx] = h[a];
h[a] = idx++;
- 图的搜索