LeetCode 37題:解數獨

題目

編寫一個程序,通過填充空格來解決數獨問題。

數獨的解法需?遵循如下規則

  1. 數字?1-9?在每一行只能出現一次。
  2. 數字?1-9?在每一列只能出現一次。
  3. 數字?1-9?在每一個以粗實線分隔的?3x3?宮內只能出現一次。(請參考示例圖)

數獨部分空格內已填入了數字,空白格用?'.'?表示。

示例 1:

輸入:board = [["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8",".",".",".",".","6","."],["8",".",".",".","6",".",".",".","3"],["4",".",".","8",".","3",".",".","1"],["7",".",".",".","2",".",".",".","6"],[".","6",".",".",".",".","2","8","."],[".",".",".","4","1","9",".",".","5"],[".",".",".",".","8",".",".","7","9"]]
輸出:[["5","3","4","6","7","8","9","1","2"],["6","7","2","1","9","5","3","4","8"],["1","9","8","3","4","2","5","6","7"],["8","5","9","7","6","1","4","2","3"],["4","2","6","8","5","3","7","9","1"],["7","1","3","9","2","4","8","5","6"],["9","6","1","5","3","7","2","8","4"],["2","8","7","4","1","9","6","3","5"],["3","4","5","2","8","6","1","7","9"]]
解釋:輸入的數獨如上圖所示,唯一有效的解決方案如下所示:

提示:

  • board.length == 9
  • board[i].length == 9
  • board[i][j]?是一位數字或者?'.'
  • 題目數據?保證?輸入數獨僅有一個解

代碼

可以參考前身:有效的數獨

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>void solveSudoku(char **board, int boardSize, int *boardColSize);
bool isValidSudoku(char **board, int boardSize, int *boardColSize);int main()
{// char b[9][10] = //     {"53..7....",//      "6..195...",//      ".98....6.",//      "8...6...3",//      "4..8.3..1",//      "7...2...6",//      ".6....28.",//      "...419..5",//      "....8..79"};char b[9][10]={"..9748...","7........",".2.1.9...","..7...24.",".64.1.59.",".98...3..","...8.3.2.","........6","...2759.."};int t, *te;char **board = (char **)malloc(sizeof(char *) * 9);for (int i = 0; i < 9; i++){board[i] = b[i];printf("%s ", b[i]);}printf("\n");solveSudoku(board, t, te);for (int i = 0; i < 9; i++){printf("%s ", board[i]);}return 0;
}void solveSudoku(char **board, int boardSize, int *boardColSize)
{int r, c;for (int p = 0; p < 9; p++){for (int q = 0; q < 9; q++){if (board[p][q] == '.'){r = p;c = q;continue;}}}static int sign = 0;for (int i = 0; i < 9; i++){for (int j = 0; j < 9; j++){if (board[i][j] == '.'){int p;for (p = 1; p <= 9 && sign == 0; p++){board[i][j] = p + '0';if (isValidSudoku(board, boardSize, boardColSize) == 1){if (i == r && j == c){sign = 1;}solveSudoku(board, boardSize, boardColSize);if (sign == 1){return;}}else{sign = 0;continue;}}if (p == 10){board[i][j] = '.';}return;}}}for (int i = 0; i < 9; i++){printf("%s ", board[i]);}printf("\n");
}bool isValidSudoku(char **board, int boardSize, int *boardColSize)
{int rownums[10], colnums[10];memset(rownums, 0, sizeof(rownums));memset(colnums, 0, sizeof(colnums));for (int i = 0; i < 9; i++){for (int j = 0; j < 9; j++){if (board[i][j] != '.'){int number = board[i][j] - '0';if (rownums[number] == 0){rownums[number] = 1;}elsereturn false;}if (board[j][i] != '.'){int number = board[j][i] - '0';if (colnums[number] == 0){colnums[number] = 1;}elsereturn false;}}memset(rownums, 0, sizeof(rownums));memset(colnums, 0, sizeof(colnums));}int i = 0, j = 0;for (int p = 3; p <= 9; p = p + 3){for (int q = 3; q <= 9; q = q + 3){i = p - 3;for (; i < p; i++){j = q - 3;for (; j < q; j++){if (board[i][j] != '.'){int number = board[i][j] - '0';if (rownums[number] == 0){rownums[number] = 1;}elsereturn false;}}}memset(rownums, 0, sizeof(rownums));}}return true;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37738.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37738.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37738.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IDEA簡單拷貝一份新項目記錄

IDEA簡單拷貝項目記錄 拷貝后改項目名&#xff0c;然后iml 配置文件改項目名&#xff0c;然后 .idea 中的compiler.xml 里面的name標簽改項目名。 就可以了

【軟件工程】軟件測試

軟件測試的對象 軟件程序文檔 測試對象&#xff1a;各個階段產生的源程序和文檔。 軟件測試的目的 基于不同的立場&#xff0c;對軟件測試的目的存在著兩種完全對立的觀點。 &#xff08;1&#xff09;一種觀點是通過測試暴露出軟件中所包含的故障和缺陷(從用戶的角度)&#xf…

ssh-keygen 做好免密登錄后不生效

免密說明 通常情況下&#xff0c;我們ssh到其他服務器需要知道服務器的用戶名和密碼。對于需要經常登錄的服務器每次都輸入密碼比較麻煩&#xff0c;因此我們可以在兩臺服務器上做免密登錄&#xff0c;即在A服務器可以免密登錄B服務器。 在A服務器上登錄B服務器時&#xff0c;…

Tik Tok娛樂+電商MCN怎么做?

在美國外的熱門市場中&#xff0c;TikTok 主要做的區域市場包括中東、拉美、歐洲和東亞&#xff0c;而這里面適合做電商的其實并不多。 歐洲、東亞都屬于成熟市場&#xff0c;且 TikTok 本身在歐洲面臨 DSA 法案更嚴格的審查&#xff0c;與在英國相同&#xff0c;歐洲各市場消…

第G1周:生成對抗網絡(GAN)入門

&#x1f368; 本文為[&#x1f517;365天深度學習訓練營]內部限免文章&#xff08;版權歸 *K同學啊* 所有&#xff09; &#x1f356; 作者&#xff1a;[K同學啊] 一、理論基礎 生成對抗網絡&#xff08;Generative Adversarial Networks, GAN&#xff09;是近年來深度學習領域…

Windows安裝Go開發環境

Windows安裝Go開發環境 一、Go語言下載地址 https://golang.google.cn/dl/ 二、設置工作空間GOPATH目錄(Go語言開發的項目路徑) 首先進入我的C盤&#xff08;你放到其他盤也行&#xff09;&#xff0c;新建一個文件夾&#xff0c;名字叫做mygo&#xff08;這個就是你的工作目…

ArcGIS Maps SDK for JavaScript系列之一:在Vue3中加載ArcGIS地圖

目錄 ArcGIS Maps SDK for JavaScript簡介ArcGIS Maps SDK for JavaScript 4.x 的主要特點和功能AMD modules 和 ES modules兩種方式比較Vue3中使用ArcGIS Maps SDK for JavaScript的步驟創建 Vue 3 項目安裝 ArcGIS Maps SDK for JavaScript創建地圖組件 ArcGIS Maps SDK for …

“深入理解JVM:探索Java虛擬機的內部工作原理“

標題&#xff1a;深入理解JVM&#xff1a;探索Java虛擬機的內部工作原理 摘要&#xff1a;本文將深入探索Java虛擬機&#xff08;JVM&#xff09;的內部工作原理&#xff0c;包括JVM的架構、類加載、內存管理、垃圾回收機制等方面。通過理解JVM的內部工作原理&#xff0c;我們…

華為開源自研AI框架昇思MindSpore應用案例:基于MindSpore框架的UNet-2D案例實現

目錄 一、環境準備1.進入ModelArts官網2.使用CodeLab體驗Notebook實例 二、環境準備與數據讀取三、模型解析Transformer基本原理Attention模塊 Transformer EncoderViT模型的輸入整體構建ViT 四、模型訓練與推理模型訓練模型驗證模型推理 近些年&#xff0c;隨著基于自注意&…

改造舊項目-長安分局人事費用管理系統

一、系統環境搭建 1、搭建前臺環境 vue3vite構建項目復制“銀稅系統”頁面結構&#xff0c;包括&#xff1a;路由、vuex存儲、菜單、登錄&#xff08;復制一個干凈的空架子&#xff09; 2、搭建后臺環境 新三大框架 SSMP聚合工程&#xff1a;common、admin&#xff0c;新的…

JAVA冒泡排序

package com.hzh.javase.day03;public class maopao {public static void main(String[] args) {int[] arr {2, 11,4,7,5,22,15,37,12,1};int zjvalue 0;//中間值boolean boofalse; //冒泡比較相鄰元素將小的提前打的放后 // 外層循環時用來控制輪數 // 內存循…

2023國賽數學建模E題思路分析

文章目錄 0 賽題思路1 競賽信息2 競賽時間3 建模常見問題類型3.1 分類問題3.2 優化問題3.3 預測問題3.4 評價問題 4 建模資料 0 賽題思路 &#xff08;賽題出來以后第一時間在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 競賽信息 全國大學生數學建模…

Linux服務器上配置HTTP和HTTPS代理

本文將向你分享如何在Linux服務器上配置HTTP和HTTPS代理的方法&#xff0c;解決可能遇到的問題&#xff0c;讓你的爬蟲項目順利運行&#xff0c;暢爬互聯網&#xff01; 配置HTTP代理的步驟 1. 了解HTTP代理的類型&#xff1a;常見的有正向代理和反向代理兩種類型。根據實際需求…

涉及近300個業務場景,重慶銀行數字員工平臺建設解析

隨著數字化轉型戰略規劃的逐步落地&#xff0c;重慶銀行于2022年6月成功建設了數字員工平臺&#xff0c;該平臺已成為行內數字化轉型的標桿應用。數字員工平臺以RPA&#xff08;機器人流程自動化&#xff09;為基礎&#xff0c;AI&#xff08;人工智能&#xff09;技術為抓手&a…

PHP最簡單自定義自己的框架view使用引入smarty(8)--自定義的框架完成

1、實現效果。引入smarty&#xff0c; 實現assign和 display 2、下載smarty&#xff0c;創建緩存目錄cache和擴展extend 點擊下面查看具體下載使用&#xff0c;下載改名后放到extend PHP之Smarty使用以及框架display和assign原理_PHP隔壁老王鄰居的博客-CSDN博客 3、當前控…

leetcode 力扣刷題 旋轉矩陣(循環過程邊界控制)

力扣刷題 旋轉矩陣 二維矩陣按圈遍歷&#xff08;順時針 or 逆時針&#xff09;遍歷59. 旋轉矩陣Ⅱ54. 旋轉矩陣劍指 Offer 29. 順時針打印矩陣 二維矩陣按圈遍歷&#xff08;順時針 or 逆時針&#xff09;遍歷 下面的題目的主要考察點都是&#xff0c;二維數組從左上角開始順…

輸出無重復的3位數和計算無人機飛行坐標

編程題總結 題目一&#xff1a;輸出無重復的3位數 題目描述 從{1,2,3,4,5,6,7,8,9}中隨機挑選不重復的5個數字作為輸入數組‘selectedDigits’&#xff0c;能組成多少個互不相同且無重復數字的3位數?請編寫程》序&#xff0c;從小到大順序&#xff0c;以數組形式輸出這些3位…

C# Linq源碼分析之Take (一)

概要 在.Net 6 中引入的Take的另一個重載方法&#xff0c;一個基于Range的重載方法。因為該方法中涉及了很多新的概念&#xff0c;所以在分析源碼之前&#xff0c;先將這些概念搞清楚。 Take方法基本介紹 public static System.Collections.Generic.IEnumerable Take (this …

【LeetCode: 2811. 判斷是否能拆分數組】

&#x1f680; 算法題 &#x1f680; &#x1f332; 算法刷題專欄 | 面試必備算法 | 面試高頻算法 &#x1f340; &#x1f332; 越難的東西,越要努力堅持&#xff0c;因為它具有很高的價值&#xff0c;算法就是這樣? &#x1f332; 作者簡介&#xff1a;碩風和煒&#xff0c;…

NavMeshPlus 2D尋路插件

插件地址:h8man/NavMeshPlus&#xff1a; Unity NavMesh 2D Pathfinding (github.com) 我對Unity官方是深惡痛覺,一個2D尋路至今都沒想解決,這破引擎早點倒閉算了. 這插件是githun的開源項目,我本身是有寫jps尋路的,但是無法解決多個單位互相阻擋的問題(可以解決但是有性能問…