1. 程式人生 > >使用Java生成全部數獨(Sudoku)佈局

使用Java生成全部數獨(Sudoku)佈局

/***********本人原創,歡迎轉載,轉載請保留本人資訊*************/
/***********文章發表請與本人聯絡,作者保留所有權利*************/
作者:wallimn
電郵:[email protected]
部落格:http://blog.csdn.net/wallimn

網路硬碟:http://wallimn.ys168.com
時間:2009-01-14
/***********本人原創,歡迎轉載,轉載請保留本人資訊*************/
/***********文章發表請與本人聯絡,作者保留所有權利*************/

引言

  數獨相信很多人都玩過,趣味性很強,十分的耐玩。可有沒有程式設計師想過玩實現一個數獨佈局的演算法呢?

  演算法是個很有意思,很神奇的東西。我第一次接觸演算法是剛學C的時候,寫DOS下的挖雷程式(當時還是WIN32,C的編譯器還是TC3.0)。當時不知種子填充演算法為何物,怎麼也實現不了挖雷時,左鍵點到空地上自動開啟相鄰的全部空地。

  到了後來,在計算機圖形學上偶然看到種子填充演算法,驚奇的發現,這正是挖雷所需要的。

  數獨佈局,需要的只是回溯演算法。惡補了一下回溯演算法的知識,花了一個週末的時間,終於把數獨佈局演算法寫好了。

特點

  可以隨機生成一局(多次呼叫,可以生成指定局數的隨機佈局)、可以生成全部佈局(注意是全部)。演算法沒有使用到遞迴,也沒有大量使用連結串列,以使用陣列為主,效率很高。

  用來佈局,只要把生成的隨機遮到一些就可以了。

演算法


//程式完

  程式看起來有點長,但大量的是註釋,邏輯很容易理解。

  執行這個程式,生成全部佈局的時候,很耗時,我運行了一個上午,還沒有生成完畢,就放棄了。程式執行過程中,我發現一個有趣的現象,單核的CPU,CPU會佔用接近100%,雙核的會佔用接近50%。看來寫運算量大的程式,需要學學如何使程式針對多核進行優化。

  有人搞過嗎?說說。

/***********本人原創,歡迎轉載,轉載請保留本人資訊*************/
/***********文章發表請與本人聯絡,作者保留所有權利*************/
作者:wallimn
電郵:[email protected]
部落格:http://blog.csdn.net/wallimn

網路硬碟:http://wallimn.ys168.com
時間:2009-01-14
/***********本人原創,歡迎轉載,轉載請保留本人資訊*************/
/***********文章發表請與本人聯絡,作者保留所有權利*************/

相關推薦

使用Java生成全部(Sudoku)佈局

/***********本人原創,歡迎轉載,轉載請保留本人資訊*************//***********文章發表請與本人聯絡,作者保留所有權利*************/作者:wallimn電郵:[email protected]部落格:http://bl

java實現的運算

數獨遊戲遊戲規則是在一個4×4或9×9的格上,預先隨機分佈了一些數字,然後要求把剩下的格上填上數字,讓每一列,行及區的數字都不能重複。數字的範圍取決於數獨的大小,例如:4×4格的只能選擇1至4,9×9格的可以選1至9。這裡的區指的是把這個n×n的格分成n個的小區,如4×4的格分成4個區,9×9分成9個區,而每

java 生成壓測

frame 數據 exce object 計劃 list ++ reat ktr public static void main(String[] args) throws IOException { List<Object[]> rows = new A

軟件工程第一次作業——的求解與生成

result pos pre 出了 void 進入 table turn ges 代碼的GitHub地址:https://github.com/Liu-SD/sudoku personal software process stages 預估耗時 實際耗時 計劃

java-生成任意格式的json

mob utf 功能 [] charset logs ejs response 接口 最近研究java的東西。之前靠著自己的摸索,實現了把java對象轉成json格式的數據的功能,返回給前端。當時使用的是 JSONObject.fromObject(object) 方法把j

JAVA生成一個二維組,使中間元素不與相鄰的9個元素相等,並限制每一個元素的個數

map 個數 nta nds put 可用 dom mov wid JAVA生成一個二維數組,使中間元素不與相鄰的9個元素相等,並限制每一個元素的個數 示例如下 至少需要九個元素:"A","B","C","D","E","F","G","H","I" 我們打印一個30*15

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

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

JAVA——簡易9*9破解器

package Sudoku_JCoder; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; impo

[Swift]LeetCode36. 有效的 | Valid Sudoku

Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules: Each row&nbs

poj2676 Sudoku(,dfs+剪枝)

思路來源 https://blog.csdn.net/xiaozhuaixifu/article/details/12253507 題意 給定一個不完整9*9數獨, 未填部分用0表示, 恢復數獨,並列印 題解 在讀入的時候, 我們開幾個陣列, s

判斷簡單的 java實現

問題說明 我們實現是簡化的數獨,即數字全部輸入後,看數獨是否正確 程式碼 public class Progarm04 { public static void main(String[] args) { int[][] grid = readASoulution(); Sy

36. Valid Sudoku/37. Sudoku Solver - 問題-- backtracking 經典

題意: 經典的遞迴題, 要求:除了要求 橫豎都填滿 1~9外, 每個3*3也都要求滿足 1~9  36. 陣列可以部分填充, 問是否一個有效的 sudoku.  寫了個好燒腦的 四重迴圈來check 3*3 的部分。  重點在於 用陣列作為hash 。 然後對於 che

Leetcode演算法Java全解答--36. 有效的

Leetcode演算法Java全解答–36. 有效的數獨 文章目錄 Leetcode演算法Java全解答--36. 有效的數獨 題目 想法 結果 總結 程式碼 我的答案 大佬們的答案

sudoku() - 演算法

一、題目描述 遊戲規則: 在 9 * 9 的宮格中,填寫的資料為 1-9,每行不能重複,每列也不能重複,組成的9個小宮格中也不能重複。 如下圖所示: 二、分析 從最上角(0,0)開始將81個宮格進行編號(0-80),通過轉換可以將數字為所在行,所在列和所在小矩陣

終局生成與求解(1)

專案Github地址 https://github.com/Tim-xiaofan/sudoku.git 準備與思考 Visual Studio GitHub程式碼託管配置 廖雪峰的網站有通俗易懂的Git教程 數獨問題 命令列引數的傳遞 (1)控制終

C++小遊戲(原創)——sudoku

  #include <iostream> #include <cstring> #include <time.h> #include <cstdlib> #include<windows.h> using

模板生成

在網上找了好多的數獨生成演算法發現一個挺好的演算法,然後自己稍微修改了一下,將其改為數獨模板生成工具,用了為我的數獨app生成模板。 本文中用到的數獨生成演算法從網上借鑑而來,但是記不清是哪個網址了,如果此演算法的原作者看到,請海涵! public class ShuDu {  &

Sudoku Killer (搜尋求)

Sudoku Killer Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 9   Accepted Submis

LeetCode題目--有效的(python/Java實現)

題目 判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。 數字 1-9 在每一行只能出現一次。 數字 1-9 在每一列只能出現一次。 數字 1-9 在每一個以

TOJ 3287 Sudoku 9*9 dfs

描述 Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smaller squares 3x3 as shown on the Figure. In some of t