搜索(待完善)
- 概述
搜索解决的问题范围:
o 最优问题
o 数个数问题
o 存在性问题
都可以用暴力搜索的方法解决(不保证效率),原因是这些问题都可以将状态或个数枚举出来。
注意:搜索可以使用递归实现也可以使用循环实现(如动态规划,bfs等)
搜索方法(dfs): //bfs 比较简单我就不写了
vec{y1,y2,y3...yn} dfs (vec{x1,x2,x3...xn})
{
if(check())
{
do something
} //结束时的操作
______________________________________________
{
do..... //进入下一层递归所需要做的事
//(如 map[i][j]='.';)
}
______________________________________
dfs(下一层的参数) ...... //多个dfs() 用循环代替
// 如 for(int i=0;i<n;i++){
dfs(i);
}
——————————————————————————————————————
{
do..... //返回上一层递归所需要做的事
// remark[i]=0; 复原操作
// D[i][k]=res; 记忆化
}
———————————————————————————————————————
return vec{y1,y2,y3...yn}; //你想要求的东西
}
像一个分裂的细胞,每个细胞会做一些事,并将新的参数传到下一层。,最底层的细胞会把信息一层一层的返回给祖始细胞
搜索的常见优化:
o 记忆化
o 剪枝
o A* IDA*
o 迭代加深