【洛谷】P1784 数独解法

洛谷P1784数独(递归+搜索) 数独是根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫内的数字均含1−9,不重复。每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的。芬兰一位数学家号称设计出全球最难的“数独游戏”,并刊登在报纸上,让大家去挑战。这位数学家说,他相信只有“智慧最顶尖”的人才有可能破解这个“数独之谜”。据介绍,目前数独游戏的难度的等级有一到五级,一是入门等级,五则比较难。 阅读详情

此题解法较简单,用了深度优先搜索的思想,缺点是多层函数调用在空间复杂度上较大,暂时未进行改进,C++代码如下:


#include <iostream>
using namespace std;
/*
sudoku solver
By Felix Chang
*/
bool success = false;
int nums[9][9];
bool check(int key,int pos)
{
    int row = pos / 9;
    int col = pos % 9;
    for(int i=0;i<9;++i)
    {
        if(nums[row][i] == key) return false;
    }
    for(int i=0;i<9;++i)
    {
        if(nums[i][col] == key) return false;
    }
    for(int i=row/3*3;i<row/3*3+3;++i)
    {
        for(int j=col/3*3;j<col/3*3+3;++j)
        {
            if(nums[i][j] == key) return false;
        }
    }
    return true;
}

//n from 0 to 80
void search(int pos)
{
    //for 1-9, try it.If proper or blank,search(n+1);
    int row = pos / 9;
    int col = pos % 9;
    if(pos == 81)
    {
        success = true;
        return;//exit
    }
    if(nums[row][col] != 0)
        search(pos+1);
    else
    {
        for(int i=1;i<10;++i)
        {
            if(check(i,pos) == true)
            {
                nums[row][col] = i;
                search(pos+1);
                if(success)
                    return;//exit2
                nums[row][col] = 0;
            }
        }
    }
}

int main()
{
    for(int i=0;i<9;++i)
    {
        for(int j=0;j<9;++j)
        {
            cin >> nums[i][j];
        }
    }
    search(0);
    for(int i=0;i<9;++i)
    {
        for(int j=0;j<9;++j)
        {
            cout << nums[i][j] << ' ';
            if(j==8) cout << endl;
        }
    }
    return 0;
}

c++数独(洛谷P1784) c++算法 递归 数独 洛谷原题 阅读详情

相关推荐

数独解题方法大全

数独解题方法大全

nmg10的博客 6万+

洛谷 P1784 数独[DFS/回溯]

To 洛谷.1784 数独 类似题:CODEVS.4966 简单数独(4*4数独)CODEVS.2924 数独挑战) 题目描述 数独是根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫内的数字均含1-9,不重复。每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的。 芬兰一位数学家号称设计出全球最难的“数独游戏...

weixin_34127717的博客 268

手把手教你复现IEEE 2025高光谱图像盲超分算法DBSR(附开源代码与避坑指南)

本文详细介绍了如何从零复现IEEE 2025高光谱图像盲超分算法DBSR,包括环境配置、数据预处理、核心模块解析、训练策略及常见问题解决方案。特别针对开源代码中的关键步骤和潜在问题提供了实用指南,帮助研究者和开发者高效实现Deep blind super-resolution技术,适用于遥感、医疗等领域的图像增强应用。

weixin_42524708的博客 413

算法-洛谷-P1784 数独

题目描述 数独是根据 9×9 盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫内的数字均含1−9,不重复。每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的。 题目来源于洛谷网,网址https://www.luogu.com.cn/problem/P1784。 此题为典型的**深度优先搜索(DFS)**题目,同时用到回溯的思想,大体思路是从第一个空格开始,不断递归搜索,一直搜索到最后一个空格即可。 代码如下: #include &lt

迢遥的呼唤的博客 450

Android 15网络子系统深度解析(一):ConnectivityService与网络管理框架全解析

深入剖析Android 15核心网络服务ConnectivityService的架构设计、NetworkAgent/Factory机制、网络状态管理、以及WiFi/移动网络切换的完整流程

Cheson的专栏 1749

TC3xx芯片中断配置避坑指南:从AUTOSAR Davinci配置到SRN地址计算的完整流程

本文详细解析了英飞凌TC3xx芯片的中断配置流程,从AUTOSAR Davinci工具链到硬件调试的全链路指南。重点介绍了中断路由(IR)模块、服务请求节点(SRN)和中断控制单元(ICU)的配置技巧,帮助开发者避开常见陷阱,优化中断性能。

weixin_30628801的博客 411

洛谷P1784_数独游戏

#include #include using namespace std; int a[9][9]; int dfs(int m); bool canplace(int row, int col, int num); void output(); int main() { int i, j; for(i = 0; i < 9; i ++) for(j = 0; j < 9;

喵 喵 喵~ 619

WVP+ZLM国标平台实战:从设备注册失败到视频播放黑屏,我遇到的5个典型问题与解法

部署WVP+ZLM国标视频平台时,设备注册失败、视频播放黑屏等问题常常让运维人员头疼不已。本文将基于真实运维场景,剖析五个最具代表性的故障案例,提供从网络配置到版本兼容性的全链路解决方案。

weixin_33178839的博客 361

洛谷P1784 数独进阶解法

#include<iostream> #include<array> using namespace std; array<array<int, 9>, 9>a; int sudofind(int m, int n, array<int, 9>& b) { array<int, 10>c; b.fill(0); c.fill(0); for (int i = 0; i < 9; i++) { c[a[i

金色传说的特级博客 321

C语言实现惯导系统的间接粗对准

间接粗对准方法具有更好的角晃动抗干扰能力,只是在短时间内线晃动抗干扰能力相对弱些,若适当延长粗对准时间(一般在分钟量级),间接粗对准方法往往都能够取得良好的效果。间接粗对准方法是一种非常实用的捷联惯导粗对准方法,得到了广泛的应用。在惯导系统进入工作前,需要进行初始对准,使得惯导系统与当地导航坐标系指向一致,便于惯导系统更好地进入工作状态。博主利用C语言实现了间接粗对准,间接粗对准较之解析粗对准更有优势。以上函数中使用的其他函数块,已在之前或之后的博客中给出。

十八与她的博客 789

【系统移植】 移植主线U-Boot(v2024.01-rc3)到RK3399

[系统移植] 移植主线U-Boot(v2024.01-rc3)到RK3399

Systemcall名屋 1004

洛谷P1784 数独题解(DFS解法)

这道题很显然要用DFS(深度优先搜索) 注:有其它方法也可以,不过我这里用的是DFS。 题目描述 数独是根据 9×9 盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫内的数字均含 1−9 ,不重复。每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的。 芬兰一位数学家号称设计出全球最难的“数独游戏”,并刊登在报纸上,让大家去挑战。 这位数学家说,他相信只有“智慧最顶尖”的人才有可能破解这个“数独之谜”。 据介绍,目前数独游戏的难度的等级

qq_52758563的博客 1888

基于深度学习YOLOv10的障碍物检测系统

为了方便用户使用,我们将开发一个图形用户界面(GUI),允许用户上传图像或视频流并查看检测结果。我们使用PySide6开发GUI界面,它是Qt框架的Python绑定,适用于开发跨平台的桌面应用程序。本文详细介绍了如何基于YOLOv10模型构建一个障碍物检测系统,包括数据集准备、模型训练和推理到图形用户界面的开发。通过这一系统,用户可以方便地上传图像或视频流并进行障碍物检测,广泛应用于自动驾驶、机器人导航等领域。

斌擎科技 1052

洛谷P1784 数独

/a来记录数据,f1,f2,f3用来标记此行、此列、此九宫格用过的数。

fxsvfd的博客 560

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

洛谷P1784数独dfs

对于行、列中出现过的数,设置一个布尔变量。   在这里可以用flag记录当前已放置数字的个数,每次放一个flag就++,这样当flag=9*9(81)时,说明已经放满了,输出即可。 代码如下: #include using namespace std; int flag=0; int num[9][9]={0};//存放原始数据 int x[9][9]={0};//标记这一行是否有重复的 int y[9][9]={0};//标记这一列是否有重

simba_2011的博客 1152

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

洛谷P1219、P1784、P11229三题的题解

我们知道,一个九宫格可以分成九个“三宫格”,而这个“三宫格”里面的数字是不能重复的,所以就诞生了一个数组box,对于第i行j列的数字有box[i/3][j/3][a[i][j]]为1。但是这不是最优解,细心推导我们还会发现如果退回去一个或两个8能创造更小的数(自己尝试时试3个就行了,越往后其他数字拼起的位数越多)。首先我看见这题的第一想法是尽量的多去拼8,因为它需要的木棍数最多,直接7个if判断余数,最后输出一/两个数字加一堆8。我们可以枚举每一个格子的位置,再看它的列、对角线是否与其他皇后相等。

lcs2011_yb的博客 494

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

[洛谷P1784]-Dancing Links解数独

说在前面指针实现有时候确实还挺不方便的… 数组实现的时候,下标既可以代表值,还可以代表位置 然而指针只能指向地址,要么多一次访问,要么单独开一个域来存= = 怎么想指针都不优啊… 然而实际测试出来还是很快的,至少没有被暴力踩hhhhh写这个舞蹈链,从上午8点写到下午4点过,从自己YY到后面不得不参考别人的程序… 因为实现比较复杂,为了让程序变得更「通用」,篡改了原算法的一个小地方,写到后面

泉華子的OI足迹 1067

搜索专题

搜索专讲 Tags:搜索 讲课 作业部落 评论地址 Part 1 课件下载(预计开放时间7.20-7.25) 开放时间结束(恕不外传校内资料) Part 2 Dancing Links 博客链接 Part 3 Meet in the middle 博客链接 题单一句话题解 题单链接 李老师给的包 [x] POJ1426-Find The Multiple☃☃ m不超过19位 [x] POJ...

weixin_30896763的博客 297

【洛谷 P1784】 【深搜】 数独

【洛谷 P1784】 【深搜】 数独 题目 解题思路 深搜 限制条件即当前行当前列当前宫都没有此数字 此题是这题的弱化版 代码 #include<iostream> #include<cstdio> using namespace std; char c; int p,a[10][10],h[10][10],l[10][10],g[5][5][10]; void dfs(int x,int y) { if (p) return; if (x>9) { p

Y的博客 296

洛谷 P1784 数独

#include #include #include #include #include #include #include #include #include #include #include #include #define inf 100000 using namespace std; int t[15][15]; bool area[15][15],hang[15][15],lie[15

Ang_Eric_的博客 494

P1784 数独(搜索与回溯)

这道题是一道经典的搜索与回溯问题,由于数独时空复杂度有限,所以搜索与回溯也可以解决问题,我们从数独的性质入手,满足每一行、每一列、每一个粗线宫内的数字均含 1−9 ,不重复,那么我们需要三个标记数组,分别标记当前行,列,小九宫格内是否有某个数字,那么我们怎么确定当前点是哪一个小九宫格呢,对于,(x,y)点来说我们假设他是第id个小九宫格,那么/*6.终止条件:如果行遍历到第九层,结束,如果遍历到当前层最后一列,则遍历下一层,如果当前层有数字,则遍历下一个小格子。(x-1)/3:确定当前点在哪一个大行。

2401_88475903的博客 525

P1784 数独(DFS)

题目描述 数独是根据 9×9 盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫内的数字均含 1−9 ,不重复。每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的。 芬兰一位数学家号称设计出全球最难的“数独游戏”,并刊登在报纸上,让大家去挑战。 这位数学家说,他相信只有“智慧最顶尖”的人才有可能破解这个“数独之谜”。 据介绍,目前数独游戏的难度的等级有一到五级,一是入门等级,五则比较难。不过这位数学家说,他所设计的数独游戏难度等级是十一

qq_43738331的博客 544

题解 P1784 【数独】

看完所有的题解之后发现没有人用二进制,我就知道我的机会来了(手动滑稽) 在做这一题之前你所需要知道的二进制操作 x << y//相当于x * pow(2,y) lowbit(x)//找到x的二进制中最小的1的位置 1 & 1 = 1 0 & 1 = 0 0 & 0 = 0 //没有了   关于这一题,line,rool,cell三个数组(均初始化为111111111(二进制))分别用来存这一行、列、九宫格(以0开始,方便九宫格的操作)还可以存的数有哪些,存在相对应的二

weixin_44500606的博客 306

P1784 数独 C语言(普遍超时写法)

据介绍,目前数独游戏的难度的等级有一到五级,一是入门等级,五则比较难。不过这位数学家说,他所设计的数独游戏难度等级是十一,可以说是所以数独游戏中,难度最高的等级。他还表示,他目前还没遇到解不出来的数独游戏,因此他认为“最具挑战性”的数独游戏并没有出现。数独是根据 9×9 盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫内的数字均含 1−9 ,不重复。每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的。

zqystca的博客 834
上一篇: 阿里云 nginx+php+wordpress 403错误
下一篇: 【洛谷】P1219 N皇后问题
「已注销」
博客等级 码龄10年 2粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值