码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数独C++代码实现


    数独是源自18世纪瑞士的一种数学游戏。中文中“数独”一次,实际上是源自于日语对于数独的音译。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。
    一个标准的9x9数独如下所示(当然还可以有更复杂的变体)

    你需要根据上述规则将其填满

    对于人类来说最容易的方法是排除法,但如果让我用程序去解决的话最容易想到使用回溯法。

    问题定义:我们使用9x9的二维vector装载数据,原始数据中有数字的填数字,没有的填'.'(或者其他)。我们使用char类型存储,因为我们其实只需要十个值。我们的目标就是将'.'全部变成数字,并且符合数独的游戏规则。

    1. bool backtracking(vectorchar>>& board) {
    2. for (int i = 0; i < board.size(); i++) { // 遍历行
    3. for (int j = 0; j < board[0].size(); j++) { // 遍历列
    4. if (board[i][j] != '.') continue; // 如果该位置已经被填写,则过这一次填写
    5. for (char k = '1'; k <= '9'; k++) { // (i, j) 这个位置放k是否合适
    6. if (isValid(i, j, k, board)) { // 是否有某行或者某列或者小宫格中有重复数字
    7. board[i][j] = k; // 如果有效则放置k
    8. if (backtracking(board)) return true; // 递归填下个数字,只有当最后一个数字都合适的时候才会返回true,否则返回false。
    9. board[i][j] = '.'; // 不合适则撤销k
    10. }
    11. }
    12. return false; // 9个数都试完了,都不行,那么就返回false
    13. }
    14. }
    15. return true; // 遍历完没有返回false,说明找到了合适棋盘位置了
    16. }
    17. bool isValid(int row, int col, char val, vectorchar>>& board) {
    18. for (int i = 0; i < 9; i++) { // 判断行里是否重复
    19. if (board[row][i] == val) {
    20. return false;
    21. }
    22. }
    23. for (int j = 0; j < 9; j++) { // 判断列里是否重复
    24. if (board[j][col] == val) {
    25. return false;
    26. }
    27. }
    28. int startRow = (row / 3) * 3;
    29. int startCol = (col / 3) * 3;
    30. for (int i = startRow; i < startRow + 3; i++) { // 判断9方格里是否重复
    31. for (int j = startCol; j < startCol + 3; j++) {
    32. if (board[i][j] == val ) {
    33. return false;
    34. }
    35. }
    36. }
    37. return true;
    38. }

    转载请标明出处,原文地址:鄙人张钊_有何贵干_物联网,C/C++,深度学习-CSDN博客

  • 相关阅读:
    分析:通过哪种方法来建立股票量化交易数据库?
    Excel 可视化教程之可视化的科学与艺术
    视频转换器WinX HD Video Converter mac中文特点介绍
    PostgreSQL数据库统计信息——analyze执行函数
    我的奋斗:我在外企那些年(二)
    【Kubernetes】k8s集群中pod的容器资源限制和三种探针
    【PID优化】基于正余弦算法 (SCA)优化PID实现微型机器人系统位置控制附simulink模型和matlab代码
    基于Python+TensorFlow+Django的交通标志识别系统
    1km栅格数据重采样成30m,为什么感觉仍不清晰#GIS
    word中图片怎么批量缩小?超级简单好用!
  • 原文地址:https://blog.csdn.net/come_from_pluto/article/details/133316040
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号