news 2026/7/1 15:03:47

DeepSeek辅助总结postgresql wiki提供的数独求解器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSeek辅助总结postgresql wiki提供的数独求解器

原文地址:https://wiki.postgresql.org/wiki/Sudoku_solver
数独求解器

兼容的 PostgreSQL 版本
9.0+

编写语言
SQL

依赖项

这是我编写的一个不算特别快的数独求解器。输入格式为:‘_’ 代表空单元格,而 ‘b’ 到 ‘j’ 代表数字 1…9。棋盘以列优先顺序存储,这意味着字符串的前 9 个字符编码了第一列(从上到下),随后的 9 个字符是第二列,依此类推。

提示:你可以通过使用 ksudoku 保存游戏来创建新的数独谜题。

withrecursive board(b,p)as(-- 以列优先顺序表示的数独棋盘,因此可以使用 substr() 来获取某一列values('__g_cd__bf_____j____c__e___c__i___jd__b__h___id____e__g__b__f_e_f____g____j_h__c_'::char(81),0)unionallselectb,pfrom(-- 生成候选棋盘:selectoverlay(b placing new_charfromstrpos(b,'_')for1)::char(81),strpos(b,'_'),new_charfromboard,(selectchr(n+ascii('b'))fromgenerate_series(0,8)n)new_char_table(new_char)wherestrpos(b,'_')>0)r(b,p,new_char)where-- 确保新字符在其列中不重复出现-- (有两个检查,因为我们要排除 p 自身的位置):strpos(substr(b,1+(p-1)/9*9,(p-1)%9),new_char)=0andstrpos(substr(b,p+1,8-(p-1)%9),new_char)=0and-- 确保新字符在其行中不重复出现:new_charnotin(selectsubstr(b,1+i*9+(p-1)%9,1)fromgenerate_series(0,8)iwherep<>1+i*9+(p-1)%9)and-- 确保新字符在其所在的 3x3 宫内不重复出现:new_charnotin(selectsubstr(b,1+i%3+i/3*9+(p-1)/27*27+(p-1)%9/3*3,1)fromgenerate_series(0,8)iwherep<>1+i%3+i/3*9+(p-1)/27*27+(p-1)%9/3*3))select-- 以下子查询用于以 '\n' 分隔的人类可读格式表示棋盘:(selectstring_agg((selectstring_agg(chr(ascii('1')+ascii(substr(b,1+y+x*9,1))-ascii('b')),'')rfromgenerate_series(0,8)x),E'\n')fromgenerate_series(0,8)y)human_readable,b board,p depth,(selectcount(*)fromboard)stepsfromboardwherestrpos(b,'_')=0limit5000;

此示例展示了如何使用递归公共表表达式(Recursive CTE)来通用地编码任何回溯算法,步骤如下:

  1. 将初始情况置于递归 CTE 的union之前。
  2. UNION之后,放置一个生成下一个可能候选值的查询。在此查询中,你将读取递归 CTE;请确保仅读取未完成的候选方案,方法是在该查询的where子句中指定此条件。
  3. 你可以(并且很可能应该)剪除无效的候选方案,方法是将生成候选值的子查询包裹在另一个子查询中,并使用剪除条件进行过滤。剪枝很重要,不仅是为了速度,还因为 PostgreSQL 会存储此查询返回的每一行(所有候选解),直到不再需要为止,你可能会用尽磁盘空间(尽管在 PostgreSQL 9.2+ 中,你可以使用temp_file_limit限制该空间,或者使用单独的临时表空间)。
  4. 最后,在最外层,递归 CTE 表中将提供所有候选方案。如本例所示,如果你剪除了所有无效的候选方案,那么所有完整的候选方案也将是有效的解。

可能的状态空间将按广度优先搜索进行处理。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 2:39:19

如何高效使用Bandage:基因组组装图分析的终极指南

如何高效使用Bandage&#xff1a;基因组组装图分析的终极指南 【免费下载链接】Bandage a Bioinformatics Application for Navigating De novo Assembly Graphs Easily 项目地址: https://gitcode.com/gh_mirrors/ba/Bandage Bandage是一款专为生物信息学设计的基因组组…

作者头像 李华
网站建设 2026/6/23 23:05:26

社会网络仿真软件:Pajek_(14).网络随机模型

网络随机模型 在社会网络分析中&#xff0c;网络随机模型是一种重要的工具&#xff0c;用于生成和模拟随机网络。这些模型可以帮助我们理解网络结构的生成机制&#xff0c;评估网络属性的显著性&#xff0c;并且在没有实际数据的情况下进行假设检验。Pajek 提供了多种生成随机网…

作者头像 李华
网站建设 2026/7/1 22:04:11

笔记本散热管理新选择:TPFanCtrl2风扇控制工具全解析

笔记本散热管理新选择&#xff1a;TPFanCtrl2风扇控制工具全解析 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 还在为ThinkPad笔记本的散热问题烦恼吗&#xff1f;TP…

作者头像 李华
网站建设 2026/7/1 22:04:14

4个维度探索Sunshine:自建低延迟游戏串流服务器实战指南

4个维度探索Sunshine&#xff1a;自建低延迟游戏串流服务器实战指南 【免费下载链接】Sunshine Sunshine: Sunshine是一个自托管的游戏流媒体服务器&#xff0c;支持通过Moonlight在各种设备上进行低延迟的游戏串流。 项目地址: https://gitcode.com/GitHub_Trending/su/Suns…

作者头像 李华
网站建设 2026/7/1 22:02:44

智能一键视频下载工具:轻松解决社交媒体内容保存难题

智能一键视频下载工具&#xff1a;轻松解决社交媒体内容保存难题 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 还在为抖音视频无法保存而烦恼&#xff1f;想批量下载精彩内容却不知从何下手&#xff1f;错…

作者头像 李华
网站建设 2026/7/1 22:02:42

3大核心价值重塑视频处理流程:LosslessCut完全指南

3大核心价值重塑视频处理流程&#xff1a;LosslessCut完全指南 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 一、认知篇&#xff1a;工具定位与核心价值解析 1.1 重…

作者头像 李华