【DFS笔记】对dfs(index,状态)一类问题的思考

当问题说到一共有n个数/n个选择,且按顺序依次选择时,一般都会用到这样的dfs模板

dfs(index,state){
   if(index==n)return;
   if(state not valid)cut; 
  for(choice):
   dfs(index+1,f(state,g(index)));
}

比如说8皇后问题:从8行依次做出选择,选择8次。状态参数为vis标记。

等等........

下面说说我对这个模板的理解:

首先,if放在dfs前面,就是说在选择之前就做了判断,这是什么意思呢?

(1)每一次dfs时,index总是增1,因为dfs调用的本质是做了一次选择,所以index参数可以理解为做选择的次数。当index传入0时,因为要做n次选择,所以index==n时才会return,而不是在n-1时return

(2)如果传入0,那么if判断时,选择的次数是已经选择的下标+1。因为下标0也算一次选择,所以下标0选择完后,在if判断时index为1,以此类推。

(3)状态参数就是做了index次选择后的状态。因为状态参数在做选择的时候更新,所以在if判断

时,对应的状态就是做了index次选择的状态(index初始传入0)

(4)因为在没有改变参数的值,所以这个模板自带回溯功能。

扫描二维码关注公众号,回复: 13778107 查看本文章

 做了3次选择后,if判断时,index为3,下标为2的已经做完选择,状态参数是0~2状态。

猜你喜欢

转载自blog.csdn.net/m0_52043808/article/details/123910682
dfs