1. 程式人生 > >37. 解數獨

37. 解數獨

因為我也還沒有完全理解這道題,所以不能寫出詳細的解答過程以及理解的思路。
就先貼程式碼吧!

程式碼:

public void solveSudoku(char[][] board) {
        search(board);
    }

    private boolean search(char[][] board){
        for (int i = 0; i < board.length; i++){
            for (int j = 0; j < board[0].length; j++){
                if (board[i][j] != '.'
) // 只有是 .號,也就是空格,我們才能填充資料 continue; for (char ch = '1'; ch <= '9'; ch++){ // 在board[i][j]中填充 0~9 來測試填入資料後board是否還是一個數獨 if (!isValid(board, i, j, ch)){ continue; } board[i][j] = ch; if
(search(board)){ return true; }else { board[i][j] = '.'; } } return false; } } return true; } private boolean isValid(char[][] board, int i, int
j, char ch) { // 行不重複 for (int col = 0; col < 9; col++){ if (board[i][col] == ch){ return false; } } // 列不重複 for (int row = 0; row < 9; row++){ if (board[row][j] == ch){ return false; } } // 3 X 3的小方格不重複 for (int row = i / 3 * 3; row < i / 3 * 3 + 3; row++){ for (int col = j / 3 * 3; col < j / 3 * 3 + 3; col++){ if (board[row][col] == ch){ return false; } } } return true; }

相關推薦

LeetCode——37. 解數

for color clas 排序 pre contain else code div 采用遞歸的思想,窮舉不在同一行,同一列,同一小方塊出現的數字,考慮查找效率,采用set保存。 set<char> set_m[9]; set<c

leetcode 37:解數

bool isValid(std::vector<std::vector<char>>& board,int row,int col,char c) { for(int i=0;i<9;i++){ if(boa

leetcode.37 解數

編寫一個程式,通過已填充的空格來解決數獨問題。 一個數獨的解法需遵循如下規則: 數字 1-9 在每一行只能出現一次。 數字 1-9 在每一列只能出現一次。 數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。 空白格用 ‘.’ 表示。 Note:

LeetCode-37. 解數

題目地址:https://leetcode-cn.com/problems/sudoku-solver/ 思路:預處理每行每列每塊能取得數,dfs。 AC程式碼: class Solution { public: bool flag_1[10][10]; boo

37. 解數

因為我也還沒有完全理解這道題,所以不能寫出詳細的解答過程以及理解的思路。 就先貼程式碼吧! 程式碼: public void solveSudoku(char[][] board) {

[LeetCode] 37. 解數

pri 序列 列塊 找到 解法 arraylist thumb 進步 檢查 題目鏈接 : https://leetcode-cn.com/problems/sudoku-solver/ 題目描述: 編寫一個程序,通過已填充的空格來解決數獨問題。 一個數獨的解法需遵循如下規則

Leetcode演算法——37、求解數

編寫程式,來求解一個數獨問題。 一個數獨的答案必須滿足以下規則: 1-9的每個數字都必須在每一行中都只出現一次 1-9的每個數字都必須在每一列中都只出現一次 1-9的每個數字都必須在每一個3*3的小方塊中都只出現一次 空格子用.表示。 思路

Leetcode 37 Sudoku Solver 解數,自己的辦法,麻煩有好的辦法,告知

嗯,這道題,覺得很難,但是自己動手寫寫,也就沒有那麼難了。題目:編寫一個程式,通過已填充的空格來解決數獨問題。一個數獨的解法需遵循如下規則:數字 1-9 在每一行只能出現一次。數字 1-9 在每一列只能出現一次。數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。

個人項目-數終局生成與解數

ima github 數獨 analysis tro AR war per https 1、先給出在這個小項目的開發過程中各個階段的程序及相關文檔 https://github.com/xulink/sudoku; 2、 PSP2.1

HDU 1426 Sudoku Killer(dfs 解數

java oid recommend 還要 targe 個數 else content 字符數 傳送門: http://acm.hdu.edu.cn/showproblem.php?pid=1426 Sudoku Killer Time Limit: 2000/1000 M

leetcode python 037 求解數

res 設置 range n) lee array result rec for import numpy as npimport syssys.setrecursionlimit(1000) #例如這裏設置為一百萬def get1(n): if n<3:

Java回溯演算法解數問題

    下面來詳細講一下如何用回溯演算法來解數獨問題。     下圖是一個數獨題,也是號稱世界上最難的數獨。當然了,對於計算機程式來說,只要演算法是對的,難不難就不知道了,反正計算機又不累。回溯演算法基本上就是窮舉,解這種數獨類的問題邏輯比較簡

leetcode題庫——解數

題目描述: 編寫一個程式,通過已填充的空格來解決數獨問題。 一個數獨的解法需遵循如下規則: 數字 1-9 在每一行只能出現一次。 數字 1-9 在每一列只能出現一次。 數字 1-9 在每一個以粗實線分隔的&

解數

編寫一個程式,通過已填充的空格來解決數獨問題。 一個數獨的解法需遵循如下規則: 數字 1-9 在每一行只能出現一次。 數字 1-9 在每一列只能出現一次。 數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。 空白格用 ‘.’ 表示。 一個數獨。 答案被標成紅色。

軟工個人專案之生成和求解數

軟工個人專案之生成和求解數獨 在這次完成個人專案的過程中,我第一次嘗試了寫csdn部落格,用vs進行效能分析,在vs裡面寫單元測試,這次收穫了很多。雖然還有很多需要改進的地方,但我會做得越來越好的~ 1、Github地址 首先給出我的github的地址: https://gith

遞迴暴力破解法解數問題

C語言原始碼如下,在Linux平臺下用GCC編譯通過並執行。附資料檔案sudoku.dat及計算結果。 8-------- --36----- -7--9-2-- -5---7--- ----457-- ---1---3- --1----68 --85---1- -9---

回溯法求解數問題的思路和程式碼

在刷題的時候遇到了一個求解數獨的問題,用回溯法寫了以下程式碼,記錄一下,之後探究有沒有更好的演算法。 演算法思路: ①讀取待求解陣列,其中待填位置為0。 ②將所有待填位置的兩個座標(行列)和目前數字封裝起來壓入棧1中。 ③開一個

HDU1426 Sudoku Killer(深搜DFS)(很坑的一道題,解數)

自從2006年3月10日至11日的首屆數獨世界錦標賽以後,數獨這項遊戲越來越受到人們的喜愛和重視。 據說,在2008北京奧運會上,會將數獨列為一個單獨的專案進行比賽,冠軍將有可能獲得的一份巨大的獎品———HDU免費七日遊外加lcy親筆簽名以及同hdu acm team合影留念的機會。 所以全球人民前仆後繼,

演算法實踐——舞蹈鏈(Dancing Links)演算法求解數

本文介紹該演算法的實際運用,利用舞蹈鏈(Dancing Links)演算法求解數獨 在前文中可知,舞蹈鏈(Dancing Links)演算法在求解精確覆蓋問題時效率驚人。 那利用舞蹈鏈(Dancing Links)演算法求解數獨問題,實際上就是下面一個流程 1、把數獨問題轉換為精確覆蓋問題 2

37.數求解

Sudoku Solver 問題描述: Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by the char