2015 CCPC H题 【DFS】

本文介绍了一种使用深度优先搜索(DFS)算法解决数独问题的方法。通过逐步填充空格,确保每行、每列和每个子网格内的数字不重复,最终找到数独的唯一解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接 点我


题意:数独,用1 - 4补全4*4的格子, 格子里面的字符*代表空。


思路:DFS暴力就可以了。


AC代码:


#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <map>
#include <string>
#include <vector>
#define lson o<<1|1, l, mid
#define rson o<<1, mid+1, r
#define ll o<<1
#define rr o<<1|1
#define INF 0x3f3f3f3f
#define eps 1e-8
#define debug printf("1\n")
#define MAXN 10000
#define MAXM 100000
#define LL long long
#define CLE(a, b) memset(a, (b), sizeof(a))
#define W(a) while(a--)
#define Ri(a) scanf("%d", &a)
#define Pi(a) printf("%d\n", (a))
#define Rl(a) scanf("%lld", &a)
#define Pl(a) printf("%lld\n", (a))
#define Ss(a) scanf("%s", a)
#define Ps(a) printf("%s\n", a)
using namespace std;
int Map[5][5];
bool judge(int x, int y, int val)
{
    for(int i = 0; i < 4; i++)
        if(Map[x][i] == val)
            return false;
    for(int i = 0; i < 4; i++)
        if(Map[i][y] == val)
            return false;
    int row, cul;
    row = x / 2 * 2; cul = y / 2 * 2;
    for(int i = row; i < row+2; i++)
        for(int j = cul; j < cul+2; j++)
            if(Map[i][j] == val)
                return false;
    return true;
}
void DFS(int x, int y)
{
    if(x == 4)
    {
        for(int i = 0; i < 4; i++)
        {
            for(int j = 0; j < 4; j++)
                printf("%d", Map[i][j]);
            printf("\n");
        }
    }
    else if(y == 4)
        DFS(x+1, 0);
    else if(Map[x][y])
        DFS(x, y+1);
    else
    {
        for(int i = 1; i <= 4; i++)
        {
            if(judge(x, y, i))
            {
                Map[x][y] = i;
                DFS(x, y+1);
                Map[x][y] = 0;
            }
        }
    }
}
char str[5];
int main()
{
    int t, kcase = 1;
    scanf("%d", &t);
    W(t)
    {
        getchar();
        for(int i = 0; i < 4; i++)
        {
            Ss(str);
            for(int j = 0; j < 4; j++)
            {
                if(str[j] == '*')
                    Map[i][j] = 0;
                else
                    Map[i][j] = str[j] - '0';
            }
        }
        printf("Case #%d:\n", kcase++);
        DFS(0, 0);
    }
    return 0;
}


资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
### CCPC 2023 H 解析 关于CCPC 2023 H的具体目描述尚未公开,但从以往的比赛惯例以及类似的目解析可以推测其可能涉及的内容和技术要点。以下是基于已有参考资料和专业知识对该类问的解答框架。 #### 1. **问背景** CCPC(Chinese Collegiate Programming Contest)作为国内重要的编程竞赛之一,通常会设计具有挑战性的算法问来测试参赛者的逻辑思维能力和编码技巧。H通常是比赛中的难点之一,往往涉及到复杂的算法模型或数据结构的应用[^2]。 #### 2. **潜在的技术方向** 根据过往的经验,H可能会覆盖以下几个方面: - 动态规划 (Dynamic Programming)[^1] - 构造性问 (Construction Problems)[^4] - 数学优化 (Mathematical Optimization) 假设该属于动态规划类别,则需关注状态转移方程的设计;如果是构造性问,则重点在于如何通过有限操作达到目标条件。 #### 3. **通用解策略** 无论具体主为何种类型,在面对高难度赛时可遵循如下方法论: ##### (1)深入理解目需求 仔细阅读并反复确认输入输出的要求及其约束条件,确保不会遗漏任何细节信息[^3]。 ##### (2)选取合适的算法工具箱 依据实际场景挑选最匹配的方法论,比如当存在重叠子问且具备最优子结构性质时优先选用DP技术[^1]。 ##### (3)编写清晰易懂的代码实现 采用模块化的方式分步完成整个功能开发流程,并辅以充分注释说明每一部分的作用机制。 ```cpp // 示例伪代码片段展示基本框架布局 #include <bits/stdc++.h> using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; // 输入规模参数 vector<long long> dp(n+1, INF); // 初始化dp数组,默认极大值表示未访问过 dp[0]=0; for(int i=1;i<=n;i++){ for(auto &coin : coins){ if(i >= coin && dp[i - coin]+costs[coin]<dp[i]){ dp[i]=dp[i - coin]+costs[coin]; } } } cout << (dp[n]==INF ? -1 : dp[n])<< "\n"; } ``` 上述例子仅作示意用途,真实情况下应严格依照官方给定的数据范围调整变量类型及边界处理方式。 #### 4. **复杂度考量** 对于大规模实例而言,效率至关重要。因此除了正确率之外还需兼顾运行时间和内存消耗指标。一般建议尽可能降低渐近时间开销至O(NlogN)甚至更低级别。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值