今天就把我所学的一种算法整理一下,加深一下理解
深度优先搜索(dfs)
先举个例子:今天早上起床洗漱,挑选今天要穿的衣服(第一步),去食堂吃早餐,吃什么好呢,得想想再决定(第二步),到达教室楼,又得寻找教室自习(第三步)······还有更多的行程就不再说了,看吧,每到一步就得进行一次选择,因为每一步都有不同的情况,那么一天的行程就有很多种情况。
深度优先搜索就是将所有可能的情况都例举出来,有点像枚举,但在某些时候比枚举更加的方便。
例如:衣服有红、蓝和绿三种颜色,早餐有,牛奶、面包和饼干三种,自习室有401、402和403三个教室。
第一步:穿红色衣服
第二步:喝牛奶
第三步:401
或者
第一步:穿红色衣服
第二步:喝牛奶
第三步:402
······
每一步做完,下一步就是一种扩展,探寻不同的情况;
以上的举得例子并不是很严谨,主要是为了加强理解,事实上每一步扩展的东西应该是相同的。
下面的这段代码就是dfs的基本模型
void dfs(int step)
{
if(step == 边界)
{····return;}判断边界;
扩展for(i=1;i<=n;i++)
{
dfs(step + 1);下一步
}
return;
}