dfs与bfs 基本框架
dfs
void dfs(int x,int y)
{
if(达到出口||无法继续)
{
相应操作;
return;
}
if(对应x方向的下一步可以继续)
{
添加标记;//给该位置记上标记,如果后续递归调用碰到了这个点,则该方向不能继续下一步
dfs(x+1,y);//调用递归
取消标记;//上一步对应的递归操作全部结束,则要取消标记对后续操作的影响
}
else if(对应y方向的下一步可以继续){
添加标记;
dfs(x,y+1);
取消标记;
}
}
bfs
#include<queue>//stl的queue容器
void bfs(起始状态){
queue<element_type> qu;//创建队列
qu.push(起始状态入队);
while(!qu.empty()){//当队列非空
if(当前状态x方向可走)
qu.push(当前状态+x);//该状态入队
if(当前状态向y方向可走)
qu.push(当前状态+y);//该状态入队
…………………
处理(队顶)qu.top();
相应操作;
qu.pop();//队首弹出队
}//一次循环结束,执行下一次循环
}