当前位置:   article > 正文

DFS——C++

DFS——C++

 dfs称为深度优先搜索是一种搜索算法。

具体算法讲解可以参考

https://blog.csdn.net/qq_63055790/article/details/133961017

例题:https://www.acwing.com/activity/content/problem/content/905/

  1. #include<iostream>
  2. using namespace std;
  3. const int N=10;
  4. int n;
  5. int path[N];
  6. bool st[N];
  7. void dfs(int u)
  8. {
  9. if(u==n)
  10. {
  11. //已经遍历完成
  12. for(int i=0;i<n;i++)
  13. {
  14. cout<<path[i]<<" ";
  15. }
  16. cout<<endl;
  17. return ;
  18. }
  19. //未完成遍历
  20. for(int i=1;i<=n;i++)
  21. {
  22. if(!st[i])
  23. {
  24. path[u]=i;
  25. st[i]=true;
  26. dfs(u+1);
  27. //恢复现场
  28. st[i]=false;
  29. path[u]=0;
  30. }
  31. }
  32. }
  33. int main()
  34. {
  35. scanf("%d",&n);
  36. dfs(0);
  37. return 0;
  38. }

例题:https://www.acwing.com/activity/content/problem/content/906/

  1. #include<iostream>
  2. using namespace std;
  3. const int N=20;
  4. char q[N][N];
  5. bool con[N],du[N],ndu[N];
  6. int n;
  7. void dfs(int u)
  8. {
  9. //边界结束情况
  10. if(u==n)
  11. {
  12. for(int i=0;i<n;i++)
  13. {
  14. for (int j=0;j<n;j++)
  15. {
  16. cout<<q[i][j];
  17. }
  18. cout<<endl;
  19. }
  20. cout<<endl;
  21. return ;
  22. }
  23. //dfs赋值情况
  24. for(int i=0;i<n;i++)
  25. {
  26. if(con[i]!=1 && du[u+i]!=1 &&ndu[n+u-i]!=1)
  27. {
  28. //本行的本空可以填
  29. q[u][i]='Q';
  30. con[i]=du[u+i]=ndu[n+u-i]=1;
  31. dfs(u+1);
  32. //恢复现场
  33. q[u][i]='.';
  34. con[i]=du[u+i]=ndu[n+u-i]=0;
  35. }
  36. }
  37. }
  38. int main()
  39. {
  40. cin>>n;
  41. for(int i=0;i<n;i++)
  42. {
  43. for(int j=0;j<n;j++)
  44. {
  45. q[i][j]='.';
  46. }
  47. }
  48. dfs(0);
  49. return 0;
  50. }

 

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

闽ICP备14008679号