当前位置:   article > 正文

深搜回溯与不回溯的区别_深搜什么时候需要回溯

深搜什么时候需要回溯

一、需要不断尝试以达到最终目的时需要回溯,比如数独、全排列

以下为全排列代码:

  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5. string str;
  6. string temp;
  7. vector<bool> vis;
  8. void dfs(int cnt,int n)
  9. {
  10. if(cnt==n)
  11. {
  12. cout<<temp<<endl;
  13. return;
  14. }
  15. for(int i=0;i<n;i++)
  16. {
  17. if(vis[i]==false)
  18. {
  19. temp.push_back(str[i]);
  20. vis[i]=true;
  21. dfs(cnt+1,n);
  22. vis[i]=false;
  23. temp.pop_back();
  24. }
  25. }
  26. }
  27. int main()
  28. {
  29. getline(cin,str);
  30. sort(str.begin(),str.end());
  31. int n=str.size();
  32. vis.resize(n);
  33. dfs(0,n);
  34. return 0;
  35. }

搜完了回来了需要重置vis状态。

二、一锤子买卖时不需要回溯,比如图的深度优先遍历、二叉树节点间的最大距离问题。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/393537
推荐阅读
相关标签
  

闽ICP备14008679号