蓝桥杯打卡Day1


文章目录

  • 全排列
  • 八皇后

一、全排列IO链接

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

cpp 复制代码
#include <bits/stdc++.h>

constexpr int N=10;

std::string s;
std::string ans;
int n;
bool st[N];

void dfs(int u)
{
    if(u==n)
    {
        std::cout<<ans<<std::endl;
        return;
    }
    
    for(int i=0;i<n;i++){
        //如果当前字符没有遍历过,则加入到当前的字符串中去
        if(!st[i]){
            st[i]=true;
            ans.push_back(s[i]);
            dfs(u+1);//继续寻找下一个满足条件的字符
            ans.pop_back();//回溯
            st[i]=false;
        }
    }
}

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);std::cout.tie(nullptr);
    
    std::cin>>s;
    n=s.size();
    dfs(0);
    return 0;
}

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

cpp 复制代码
#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    string s;
    cin >> s;
    do cout << s << '\n';
    while(next_permutation(s.begin(), s.end()));

    return 0;
}

二、八皇后IO链接

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

cpp 复制代码
#include <bits/stdc++.h>

constexpr int N=20,M=100;

int n,ans[M];//ans保存92种八皇后信息
int idx;
char path[8];
bool col[N],dg[N],udg[N];//col表示列,dg表示主对角线,udg表示副对角线

void dfs(int u)
{
    if(u==8)
    {
        ans[++idx]=atoi(path);//加入到某一种情况中
        return;
    }
    
    for(int i=0;i<8;i++){
        if(!col[i]&&!dg[u+i]&&!udg[8-u+i]){
            col[i]=dg[u+i]=udg[8-u+i]=true;
            path[u]=i+1+'0';
            dfs(u+1);
            col[i]=dg[u+i]=udg[8-u+i]=false;
        }
    }
}

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);std::cout.tie(nullptr);
    
    dfs(0);
    std::cin>>n;
    
    while(n--){
        int x;
        std::cin>>x;
        std::cout<<ans[x]<<std::endl;
    }
    
    return 0;
}
相关推荐
凯瑟琳.奥古斯特4 小时前
高阶子查询题目精炼
开发语言·数据库·python·职场和发展·数据库开发
凯瑟琳.奥古斯特6 小时前
数据库原理选择题精选
数据库·python·职场和发展
秦明月139 小时前
水冷板装配安全回路设计实战解析
经验分享·其他·职场和发展·创业创新·学习方法
x_xbx11 小时前
LeetCode:5. 最长回文子串
算法·leetcode·职场和发展
过期动态16 小时前
【LeetCode 热题 100】无重复字符的最长子串
java·数据结构·spring boot·算法·leetcode·职场和发展
Raink老师17 小时前
【AI面试临阵磨枪-088】Skill 如何做参数校验、依赖注入、权限控制、超时、重试、幂等?
人工智能·面试·职场和发展
浅念-17 小时前
LeetCode 记忆化搜索 刷题总结
数据结构·算法·leetcode·职场和发展·深度优先·dfs
bbaydnog17 小时前
嵌入式面试高频题第4弹:函数指针进阶、堆栈分析、Makefile入门,这3个答不上来就悬了
单片机·面试·职场和发展
jiayong2317 小时前
海量数据常见面试问题及详细解答
大数据·面试·职场和发展
我爱cope18 小时前
【Agent智能体12 | 反思设计模式-使用外部反馈】
人工智能·设计模式·语言模型·职场和发展