数独(1)

描述

为了找到百年沉睡的原因,寻回百年前与公主一起的记忆碎片,明白自己是谁,林克必须破解数独谜题。

林克需要在限定时间内,把9×9的数独补充完整,使得图中每行、每列、每个3 × 3的九宫格内数字1~9均恰好出现一次。

林克需要寻回失去的记忆碎片,你,作为林克的朋友,需要帮忙林克寻回9×9棋盘中失去的数字。

或许有一天,林克也能帮助你,寻回关于你是谁,你从哪里来的记忆碎片。

这是数独试炼I(解密成功可以解锁林克前25%的记忆碎片)

输入

输入为9×9的数据。一共9行,每行有9个数字。

数字为0表示对应的数字盘为空。

输出

对于每个测试用例,程序应以与输入数据相同的格式打印解决方案(9×9)。

空单元格必须根据规则进行填充。

如果解决方案不是唯一的,则程序可以打印其中任何一种。

样例

103000509
002109400
000704000
300502006
060000050
700803004
000401000
009205800
804000107
143628579
572139468
986754231
391542786
468917352
725863914
237481695
619275843
854396127

难度

高,深搜

解法

数独数据结构设计如上

Sudu[ N ] [ N ] 存放数独棋盘中的数字,0代表还没有填

row[ N ] [ N ],col [ N ] [ N ],grid[ N ] [ N ] 为三个标志位,用于判断数字是否重复摆放。例如上述图中(0,0)号位置为1,它的所在行为0,所在列为0,所在grid为0 (把每个3*3的九宫格看成一个grid)按行至列排序为 0-8,转换方法为:

第r行第c列的元素在 第k个grid里(k = (r/3) * 3 + c/3)

紧接着进行常规法深搜。

代码

#include<bits/stdc++.h>
using namespace std;const int N9 = 9; //递归9层
const int N = 10;
int Sudu[N][N];
bool row[N][N],col[N][N],grid[N][N];
//每一行每一列扫描
bool dfs(int r,int c){if(r==N9) return true;  //[0-8]bool flag = false;  //是否找到可行解if(Sudu[r][c]){      //Sudu中数字不为1if(c==8) flag = dfs(r+1,0);  //搜索下一行else flag = dfs(r,c+1);return flag;}//每一个3*3的grid,寻找第k个gridint k = (r/3)*3 + c/3;for(int i=1;i<=9;i++){   //尝试在Sudu[r][c]摆下1-9的数字if(!row[r][i] && !col[c][i] && !grid[k][i]){  //如果该数字还没有被摆放row[r][i] = true; col[c][i] = true; grid[k][i] = true;  //每行每列每grid标志Sudu[r][c] = i;  //从1-9开始尝试摆下数字if(c==8) flag = dfs(r+1,0);  //搜索下一行else flag = dfs(r,c+1);if(flag) return true;//还原状态Sudu[r][c]=0;row[r][i] = false; col[c][i] = false; grid[k][i] = false;}}return false;
}int main()
{//输入输出加速std::ios::sync_with_stdio(false);std::cin.tie(NULL);std::cout.tie(NULL);memset(row,false,sizeof(row));memset(col,false,sizeof(col));memset(grid,false,sizeof(grid));for(int i=0;i<N9;i++)for(int j=0;j<N9;j++){char ch;cin>>ch;Sudu[i][j] = ch - '0';if(Sudu[i][j]){row[i][Sudu[i][j]] = true;  //第i行中Sudu中的数字已经被使用col[j][Sudu[i][j]] = true; //第j行中Sudu中的数字已经被使用grid[(i/3)*3 + j/3][Sudu[i][j]] = true;  //第grid方块中Sudu中的数字已经被使用}}dfs(0,0);cout<<"解为:"<<endl;for(int i=0;i<N9;i++){for(int j=0;j<N9;j++)cout<<Sudu[i][j];cout<<endl;}
}

算法实践:数独(1)相关推荐

  1. 算法实践——数独的基本解法

    数独(Sudoku)是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个粗线宫内的数字均含1-9,不重复. 每一道合格的数独谜 ...

  2. 深度学习算法实践(基于Theano和TensorFlow)

    深度学习算法实践(基于Theano和TensorFlow) 闫涛 周琦 著 ISBN:9787121337932 包装:平装 开本:16开 用纸:胶版纸 正文语种:中文 出版社:电子工业出版社 出版时 ...

  3. 人脸验证 DeepID 算法实践

    人脸验证 DeepID 算法实践 4,610 次阅读 - 文章 作者:雨石  出处:雨石的博客 目前人脸验证算法可以说是DeepID最强,本文使用theano对DeepID进行实现.关于deepid的 ...

  4. SDCC 2015算法专场札记:知名互联网公司的算法实践

    SDCC 2015算法专场札记:知名互联网公司的算法实践 发表于4小时前|526次阅读| 来源作者投稿|0 条评论| 作者张俊林 SDCC算法架构大数据京东腾讯 摘要:11月21日,为期三天的SDCC ...

  5. 实时通信服务中的语音解混响算法实践

    导读: 随着音视频通信会议越来越普及,与会各方在不同环境中遇到了越来越明显且差异的混响场景,譬如大会议室场景.玻璃会议室场景和小房间且隔音材料不佳场景等.为了保证更好的听音可懂度和舒适度,通信中的语音 ...

  6. 阿里妈妈品牌广告中的 NLP 算法实践

    导读:本次分享的主题为阿里妈妈品牌广告中的 NLP 算法实践,主要内容包括: 1. 品牌广告业务模式与技术架构的简要介绍 2. NLP 算法在品牌搜索广告中的实践,以两个具体的算法问题展开:品牌意图识 ...

  7. 阿里妈妈流量反作弊算法实践

    阿里妈妈是阿里巴巴集团旗下商业数字营销平台.依托阿里巴巴集团核心的商业数据和超级媒体矩阵,为数百万的广告主每年提供上千亿金额的广告服务. 2020年中国互联网广告市场规模达5292亿元,根据秒针< ...

  8. 机器学习经典算法实践_服务机器学习算法的系统设计-不同环境下管道的最佳实践

    机器学习经典算法实践 "Eureka"! While working on a persistently difficult-to-solve problem, you disco ...

  9. asp.net从入门到精通配套课件_MATLAB从入门到算法实践第八期本周六直播

    推荐Matlab算法经典课程,此课程已经经过7次升级和打磨,累计超过3000多人学习,想从零基础入门和想提高Matlab编程水平的同学推荐加入学习. 讲师介绍 董辰辉 Matlab 畅销书主编.上市公 ...

  10. C#经典算法实践,回顾往生,更是致敬《算法导论》

    该文章的最新版本已迁移至个人博客[比特飞],单击链接 C#经典算法实践,回顾往生,更是致敬<算法导论> | .Net中文网 访问. 概述 本系列博文将会向大家介绍本人在钻研<算法导论 ...

最新文章

  1. php 比较,PHP类型比较
  2. python合法关键字是_python练习题-day18
  3. 如何在SAP云平台上使用MongoDB服务 1
  4. 老罗android oat,入门ART虚拟机(5)——OAT文件
  5. Leetcode--738. 单调递增的数字
  6. 实战 - Nexus搭建Maven私服
  7. 宝塔面板建立站点无法打开网页解决办法
  8. 欠四大银行信用卡不还,最终会怎么样?
  9. 南华大学计算机考研真题,2021南华大学考研历年真题复习资料
  10. MySQL按照字符排序,英文,中文,数字综合排序
  11. h5活动是什么意思_H5页面到底是什么?
  12. Symbian日薄西山了么
  13. 学习使用junit进行单元测试,
  14. 《穷爸爸和富爸爸》读后感
  15. CCAI 2017 日本理化学研究所先进智能研究中心主任杉山将:弱监督机器学习的研究进展...
  16. 天联助力畅捷通T+实现远程访问说明
  17. PHP 浮点数的加减乘除
  18. 造车新势力“蔚小理”变弱了?不,他们已走过幼年期
  19. 2021年中国涤纶行业现状及趋势分析:涤纶需求旺盛,整体呈持续扩张走势
  20. layui java_LayUI 的安装及使用LayUI 的介绍

热门文章

  1. python城市提取_使用python从文本中提取城市名称
  2. 多线程间的通信和同步
  3. 网络环境下连接SQL Server和Oracle 19c的方法
  4. 离线装docker和相关应用保姆级教程——以安装docker-jupyter/notebook为例
  5. emgucv没有bin文件夹
  6. s8韩版 android8,真凉了!三星S8安卓8.0稳定版系统推送时间曝光:2月底
  7. 自媒体全新赛道:三农领域怎么做?
  8. fiddler抓包获取mysql密码_PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
  9. 进一步理解抽象工厂模式——开闭原则
  10. telnet远程管理(思科)