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