• 蓝桥杯打卡Day1


     

    70530b4346544ad4821252fa57119ccc.jpeg

     


     

    文章目录

    • 全排列
    • 八皇后

    一、全排列IO链接

    本题思路:本题是一道经典的全排列问题,深度优先搜索即可解决。

    1. #include
    2. constexpr int N=10;
    3. std::string s;
    4. std::string ans;
    5. int n;
    6. bool st[N];
    7. void dfs(int u)
    8. {
    9. if(u==n)
    10. {
    11. std::cout<
    12. return;
    13. }
    14. for(int i=0;i
    15. //如果当前字符没有遍历过,则加入到当前的字符串中去
    16. if(!st[i]){
    17. st[i]=true;
    18. ans.push_back(s[i]);
    19. dfs(u+1);//继续寻找下一个满足条件的字符
    20. ans.pop_back();//回溯
    21. st[i]=false;
    22. }
    23. }
    24. }
    25. int main()
    26. {
    27. std::ios::sync_with_stdio(false);
    28. std::cin.tie(nullptr);std::cout.tie(nullptr);
    29. std::cin>>s;
    30. n=s.size();
    31. dfs(0);
    32. return 0;
    33. }

    利用STL库中的next_permutation函数来求全排列问题:

    1. #include
    2. #include
    3. using namespace std;
    4. int main()
    5. {
    6. string s;
    7. cin >> s;
    8. do cout << s << '\n';
    9. while(next_permutation(s.begin(), s.end()));
    10. return 0;
    11. }

    二、八皇后IO链接

    本题思路:利用dfs的方式找出92组解,判定该点是否可以放皇后时,用了三个bool类型的数组col[N], dg[N], udg[N]来储存某列,某正对角线,某副对角线是否可以放置,所以当其中值为true时,就不能在该点放。我们需要一个数组ans来储存答案,同时,我们得想办法把每个皇后所在列转成int类型存起来。为了方便,我们在进行dfs时可以先把答案用char类型储存在path[8]数组里面,最后转成int类型放进ans数组最后处理m次询问就行。

    1. #include
    2. constexpr int N=20,M=100;
    3. int n,ans[M];//ans保存92种八皇后信息
    4. int idx;
    5. char path[8];
    6. bool col[N],dg[N],udg[N];//col表示列,dg表示主对角线,udg表示副对角线
    7. void dfs(int u)
    8. {
    9. if(u==8)
    10. {
    11. ans[++idx]=atoi(path);//加入到某一种情况中
    12. return;
    13. }
    14. for(int i=0;i<8;i++){
    15. if(!col[i]&&!dg[u+i]&&!udg[8-u+i]){
    16. col[i]=dg[u+i]=udg[8-u+i]=true;
    17. path[u]=i+1+'0';
    18. dfs(u+1);
    19. col[i]=dg[u+i]=udg[8-u+i]=false;
    20. }
    21. }
    22. }
    23. int main()
    24. {
    25. std::ios::sync_with_stdio(false);
    26. std::cin.tie(nullptr);std::cout.tie(nullptr);
    27. dfs(0);
    28. std::cin>>n;
    29. while(n--){
    30. int x;
    31. std::cin>>x;
    32. std::cout<
    33. }
    34. return 0;
    35. }

     

     

  • 相关阅读:
    【面试题】说说你对 async和await 理解
    Redis高性能设计之epoll和IO多路复用深度解析
    Spring 核心
    C++ - git 命令行
    图上问题训练题解
    VScode+esp-idf:例程(esp32-web-camera)保存视频到sd卡
    Java中ReentrantLock锁的尝试锁,可中断锁,公平锁讲解与实例代码
    React 使用echarts绘制个性滚动柱状图
    XML Web 服务 Eclipse实现中的sun-jaxws.xml文件
    详解Kubernetes网络模型
  • 原文地址:https://blog.csdn.net/qq_67458830/article/details/132655675