搜索与回溯综述

总的思路

计算机的优势在于它可以无脑的去尝试,所以它可以搜索尽所有的可能,然后选出合适的。但无脑的搜索在问题规模过大时也会非常耗费时间空间,所以我们要编写程序告诉计算机用一个更优的策略继续运行下去。

固定套路

总的来说,搜索与回溯是有固定模板套路的,即遵循
选择一个->探索下一步->回溯
写这样的程序时,我们只需要按这个模版去思考问题,先思考能够选择的范围,然后思考选择了这个之后产生了哪些变化,调用下一步,再看具体情况回溯即可。

框架一

int search(int k){
  for(i=1;i<=可选总数;i++)
     if(可选){
      选上并修改所有产生的变化
      if(到达目的地) 输出结果;
      else search(k+1);
      恢复:取消选上的结果,回退变化的值
    }
}

框架二

int search(int k){
  if(到目的地) 输出结果;
  else{
    for(i=1;i<=可选总数;i++)
     if(可选){
      选上并修改所有产生的变化
      search(k+1);
      恢复:取消选上的结果,回退变化的值
    }
}
}

你可能感兴趣的:(搜索与回溯综述)