8627 数独

news2024/9/21 2:43:33

为了判断数独解是否合法,我们需要遵循以下步骤:

1. **检查每一行**:确保1到9每个数字在每一行中只出现一次。
2. **检查每一列**:确保1到9每个数字在每一列中只出现一次。
3. **检查每个3x3的宫**:确保1到9每个数字在每个3x3的宫中只出现一次。

对于每个case,我们将执行上述三个检查。如果所有检查都通过,则输出"YES",表示解是合法的;如果任何检查失败,则输出"NO",表示解不合法。

下面是实现这一逻辑的C++代码:


#include <iostream>
#include <vector>
using namespace std;

bool checkRow(const vector<vector<int>>& sudoku, int row) {
    vector<bool> seen(10, false);
    for (int num : sudoku[row]) {
        if (seen[num]) return false;
        seen[num] = true;
    }
    return true;
}

bool checkColumn(const vector<vector<int>>& sudoku, int col) {
    vector<bool> seen(10, false);
    for (int i = 0; i < 9; ++i) {
        int num = sudoku[i][col];
        if (seen[num]) return false;
        seen[num] = true;
    }
    return true;
}

bool checkSquare(const vector<vector<int>>& sudoku, int startRow, int startCol) {
    vector<bool> seen(10, false);
    for (int row = 0; row < 3; ++row) {
        for (int col = 0; col < 3; ++col) {
            int num = sudoku[startRow + row][startCol + col];
            if (seen[num]) return false;
            seen[num] = true;
        }
    }
    return true;
}

bool isValidSudoku(const vector<vector<int>>& sudoku) {
    for (int i = 0; i < 9; ++i) {
        if (!checkRow(sudoku, i) || !checkColumn(sudoku, i)) return false;
    }
    for (int row = 0; row < 9; row += 3) {
        for (int col = 0; col < 9; col += 3) {
            if (!checkSquare(sudoku, row, col)) return false;
        }
    }
    return true;
}

int main() {
    int T;
    cin >> T;
    while (T--) {
        vector<vector<int>> sudoku(9, vector<int>(9));
        for (int i = 0; i < 9; ++i) {
            for (int j = 0; j < 9; ++j) {
                cin >> sudoku[i][j];
            }
        }
        cout << (isValidSudoku(sudoku) ? "YES" : "NO") << endl;
    }
    return 0;
}

这段代码首先定义了几个辅助函数来检查数独的行、列和3x3宫是否满足条件。然后,`isValidSudoku`函数使用这些辅助函数来判断整个数独是否合法。最后,`main`函数读取输入并对每个case调用`isValidSudoku`函数,根据返回值输出相应的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1919171.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跨域解决方案处理

文章目录 首先了解什么是跨域1. 什么是跨域&#xff1f;2. 源是什么&#xff1f;3. 同源策略又是什么&#xff1f;4. 同源请求与非同源请求5. 浏览器对跨域请求的限制有哪些&#xff1f; 解决跨域方案1. JSONP&#xff08;此解决方式已过时&#xff09;2. CORS&#xff08;此方…

jstat命令介绍

jstat&#xff1a;查看JVM统计信息 一 基本情况二 基本语法2.1 option参数1. 类装载相关的&#xff1a;2. 垃圾回收相关的-gc&#xff1a;显示与GC相关的堆信息。包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息。-gccapacity&#xff1a;显示…

【C】Structure

参考摘抄学习来自&#xff1a; C 结构体C语言必学知识点 "结构体"详细解析&#xff01;C 语言之结构体最全面总结C typedef 文章目录 1 定义2 初始化3 结构体大小的计算4 访问结构成员5 结构作为函数参数6 指向结构的指针7 结构体数组8 动态申请结构体 1 定义 它允…

构造函数的初始化列表,static成员,友元,内部类【类和对象(下)】

P. S.&#xff1a;以下代码均在VS2022环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;LiUEEEEE                        …

【C++:默认成员函数】

构造函数 特点 没有返回值支持函数重载对象实例化时&#xff0c;编译器自动调用作用不是构造&#xff0c;而是初始化函数名与类名相同无参函数和全缺省的函数&#xff0c;不用传参就能调用的函数叫做默认构造函数 构造函数是一个特殊的成员函数 注&#xff1a;无参构造函数在实…

一场夏测杀出个“双冠王”,极越01成为纯电SUV标杆

文 | AUTO芯球 作者 | 雷慢 万万没想到&#xff0c;懂车帝夏测运动会杀出一匹最大的黑马&#xff0c;竟然是极越01。 当前正在进行的懂车帝夏测运动会&#xff0c;在“纯电SUV/MPV续航达成率”赛事中&#xff0c;极越01以85.8%的续航达成率获得第一名。并且由于赛制规则限制…

Go泛型详解

官网文档&#xff1a;https://go.dev/blog/intro-generics 泛型为该语言添加了三个新的重要功能&#xff1a; 函数和类型的类型参数。将接口类型定义为类型集&#xff0c;包括没有方法的类型。类型推断&#xff0c;在许多情况下允许在调用函数时省略类型参数。 类型参数&…

Java高级重点知识点-22-缓冲流、转换流、序列化流、打印流

文章目录 缓冲流字节缓冲流字符缓冲流 转换流InputStreamReader类OutputStreamWriter类 序列化ObjectOutputStream类ObjectInputStream类 打印流 缓冲流 缓冲流,也叫高效流&#xff0c;是对4个基本的 FileXxx 流的增强&#xff0c;所以也是4个流 基本原理&#xff1a; 缓冲流的…

SpringBoot集成Sentinel 实现QPS限流

Spring Cloud Alibaba 的 Sentinel 组件提供了丰富的“流量控制“规则&#xff0c; 单体SpringBoot应用中也可以集成 Sentinel 来实现流量控制&#xff0c;本文主要讲 QPS流量控制。 SpringBoot集成Sentinel有两种方式&#xff1a; 一种是 dashboard控制面板的方式&#xff0…

virturalBox+K8S部署jaeger-all-in-one

pod的yaml如下&#xff1a;这里使用的是主机host模式 apiVersion: apps/v1 kind: Deployment metadata:name: jaegerlabels:app: jaeger spec:replicas: 1selector:matchLabels:app: jaegertemplate:metadata:labels:app: jaegerspec:hostNetwork: truecontainers:- name: jae…

【js面试题】深入理解浏览器对象模型(BOM)

面试题&#xff1a;请你说说对bom的理解&#xff0c;常见的bom对象你了解哪些 引言&#xff1a; 浏览器对象模型&#xff08;BOM&#xff09;是JavaScript中用于与浏览器窗口及其内容进行交互的一组对象和方法。 BOM的核心是window对象&#xff0c;它代表了浏览器窗口本身&…

tableau人口金字塔,漏斗图,箱线图绘制 - 13

人口金字塔&#xff0c;漏斗图&#xff0c;箱线图 1. 金字塔1.1 定义1.2 金字塔创建1.2.1 数据导入1.2.2 数据异常排查1.2.3 创建度量字段1.2.4 转换属性1.2.5 创建数据桶1.2.6 选择相关属性1.2.7 年龄排序1.2.8 创建计算字段1.2.9 选择相关字段1.2.10 设置轴排序1.2.11 设置颜…

Python编程学习笔记(4)--- 字典

目录 1 什么是字典 2 使用字典 2.1 访问字典中的值 2.2 添加键值对 2.3 创建空字典 2.4 修改字典中的值 2.5 删除键值对 2.6 类似键值对组成的字典 2.7 使用get&#xff08;&#xff09;来访问值 3 遍历字典 3.1 遍历所有键值对 3.2 遍历字典中的所有键 3.3 按照特…

【C语言 】C语言 学生选修课程系统(源码+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

【限免】HFM雷达信号及模糊函数MATLAB代码

微信公众号&#xff1a;EW Frontier QQ交流群&#xff1a;949444104 HFM信号 HFM 信号表达式: 式中:T 为脉冲宽度,b -k / f1 f2 为信号的调频参数,k B / T 为对应的线性调频斜率,B 为信号带宽,f0 为波形中心频率,f1 f0 -B / 2 为下限频率,f2 f0 B / 2 为上限频率。 仿真结…

【系统架构设计】计算机组成与体系结构(三)

计算机组成与体系结构&#xff08;三&#xff09; 计算机系统组成存储器系统主存储器辅助存储器Cache存储器Cache 基本原理映射机制直接映射全相联映射组相联映射 替换算法写操作 流水线&#xff08;计算&#xff09;流水线周期流水线执行时间流水线的吞吐率流水线的加速比 计算…

【unity笔记】九、Unity添加串口通信

unity仿真使用虚拟串口调试。下面为简单流程。 常用串口调试软件在这里下载。 1.虚拟串口 添加虚拟串口&#xff0c;这里使用com1 com2 2. 串口调试 在这里为虚拟串口发送消息。 3. unity配置 3.1 设置 在文件->生成设置->玩家设置->玩家->其他设置 中找到…

C++|智能指针

目录 引入 一、智能指针的使用及原理 1.1RAII 1.2智能指针原理 1.3智能指针发展 1.3.1std::auto_ptr 1.3.2std::unique_ptr 1.3.3std::shared_ptr 二、循环引用问题及解决方法 2.1循环引用 2.2解决方法 三、删除器 四、C11和boost中智能指针的关系 引入 回顾上…

接口测试框架基于模板自动生成测试用例!

引言 在接口自动化测试中&#xff0c;生成高质量、易维护的测试用例是一个重要挑战。基于模板自动生成测试用例&#xff0c;可以有效减少手工编写测试用例的工作量&#xff0c;提高测试的效率和准确性。 自动生成测试用例的原理 为了实现测试用例数据和测试用例代码的解耦&a…

企事业网站需要做软件测试吗?包括哪些测试内容和好处?

在这个数字化时代&#xff0c;企事业网站已经成为宣传和交流的重要平台&#xff0c;它的稳定性、安全性和用户体验对于企业形象和业务发展至关重要。因此&#xff0c;为了确保企事业网站的良好运行&#xff0c;对其进行软件测试是至关重要的。那么网站测试具体有哪些好处?又包…