回溯思想

回溯

Backtracking(回溯)属于DFS。

  • 普通的DFS主要用在可达性问题,这种问题只需要执行到特定的位置然后返回即可。
  • 而Backtracking主要用于求解排列组合问题,例如有{'a','b','c'}三个字符,求解所有由这三个字符排列得到的字符,这种问题在执行到特定位置返回之后还会继续执行求解过程。

因为Backtracking不是立即返回,而是要继续求解,因此在程序实现时,需要注意对元素的标记问题:

  • 在访问一个新元素进入新的递归调用时,需要将新的元素标记为已经访问,这样才能在继续递归调用时不用重复访问该元素。
  • 但是在递归返回时,需要将元素标记为未访问,因为只需要保证一个递归链中不同时访问一个元素,可以访问已经访问过但是不在当前递归链中的元素。

猜你喜欢

转载自www.cnblogs.com/yjxyy/p/11111011.html