个人瑕疵理解。dfs以作为深度优先搜索,我认为可以以树状图来理解。外层有一个for循环来控制在某一步的时候,这一步可以取得的所有的值,然后再一一进行发散,即在这一步后的子步也在for循环中,重复上一步的方法,使得子步骤也得到所有想要的值。
如何进行子步骤呢?需要调用自己本身,并且step+1。
void dfs(int step){
判断边界
尝试每一种可能 for(i=1;i<=n;i++){
继续下一步 dfs(step+1)
}
返回
}
个人觉得dfs应该只是适用于数组,这样才可以控制步骤的进行。使用dfs之后可以得到想要条件下的所有的可能行,使每一种可能得到后与所需结果相比较,然后得到结果,所以一般来说是没有储存可能结果的值。
写下的内容可能只有我自己能看明白,但我觉得这对于每个人来说都是值得尝试的一个学习方法。这样的方法并不需要我们将知识能够很清楚、清晰的传递出来,我们可以以自己喜欢的方式呈现,因为这不是做给别人看的题解,而是通过写下文章使得自己能够更充分理解知识的方法。