數獨Sudoku

數獨(すうどく,Sūdoku),是源自18世紀瑞士發明,流傳到美國,再由日本發揚光大的一種數學游戲。是一種運用紙、筆進行演算的邏輯游戲。玩家需要根據9×9盤面上的已知數字,推理出所有剩余空格的數字,并滿足每一行、每一列、每一個粗線宮內的數字均含1-9,不重復。

下面我們寫一個小程序來求解數獨問題。

對于計算機來說,他無法根據自己的判斷聰明的給出解答,只能從首個空位置逐一嘗試,如果發現到目前為止走不動了,則需要會退到上一個填數的位置,嘗試下一個數字,以此類推。

使用棧的非遞歸方式。

  • 我們設置一個結構,包含元素的行號、列號以及放置的數字,每次講放置的信息記錄到棧里;
  • 如果走到某個位置發現從1-9沒有任何元素可以在這里放置,則需要回溯,回到上一個位置,為下一個位置留出一個元素。

CODE:

import java.util.Stack;class Help {int row;int col;int val;
}
public class Sudoku {/*** Use stack store the roads.* @param chess* @return*/public static int[][] getSudoku(int[][] chess) {Stack<Help> stack = new Stack<Help>();int val = -1;for(int i=0; i<9; i++) {for(int j=0; j<9; j++) {if(chess[i][j] != 0)continue;boolean flag = false;int k;if(val == -1)k = 0;else k = val+1;for(; k<10; k++) {if(isValid(k, i, j, chess)) {Help h = new Help();h.row = i;h.col = j;h.val = k;stack.add(h);chess[i][j] = k;val = -1;flag = true;}if(flag == true)k = 10;}if(flag == false && !stack.isEmpty()) { //There is no road, backtrackingHelp h = stack.pop();i = h.row;j = h.col-1;val = h.val;chess[i][j+1] = 0;}}}return chess;}/*** Judge if it is valid when chess[row][col] = k.* @param k* @param row* @param col* @param chess* @return*/private static boolean isValid(int k, int row, int col, int[][] chess) {for(int i=0; i<9; i++)if(chess[row][i] == k)return false;for(int i=0; i<9; i++) if(chess[i][col] == k)return false;int r = row/3, c = col/3;for(int i=r*3; i<r*3+3; i++) {for(int j=c*3; j<c*3+3; j++) {if(chess[i][j] == k)return false;}}return true;}public static void main(String[] args) {// TODO Auto-generated method stubint[][] a = {{0,4,2,0,6,3,0,0,9},{6,0,0,0,1,0,0,0,5},{3,0,0,0,2,0,4,8,0},{1,0,0,5,0,2,6,0,8},{4,0,0,0,0,7,0,0,1},{9,0,5,6,0,0,0,0,7},{0,3,6,0,5,0,0,0,2},{2,0,0,0,7,0,0,0,4},{7,0,0,2,9,0,8,5,0}};int[][] res = getSudoku(a);for(int i=0; i<9; i++) {for(int j=0; j<9; j++)System.out.print(res[i][j] + " ");System.out.println();}}}

轉載于:https://www.cnblogs.com/little-YTMM/p/5507841.html

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

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

相關文章

電腦CPU選購的幾個指標

CPU的概念介紹 CPU是Central Processing Unit(中央處理器)的縮寫&#xff0c;CPU的詳細參數包括內核結構&#xff0c; 主頻&#xff0c;外頻&#xff0c;倍頻&#xff0c;接口&#xff0c;緩存&#xff0c;多媒體指令集&#xff0c;制造工藝&#xff0c;電壓&#xff0c;封裝形…

idea生成方法注釋的正確方法

生成方法注釋 1.打開File -> Settings 2.Editor -> Live Templates -> 點擊右邊加號為自己添加一個Templates Group -> 然后選中自己的Group再次點擊加號添加Live Templates 重點&#xff1a;Abbreviation那里不要用/開頭的&#xff01;&#xff01;&#xff01; …

php linux 緩存文件,Linux下搭建網站提示緩存文件寫入失敗怎么辦?

Linux下搭建網站提示緩存文件寫入失敗時該怎么處理&#xff1f;基于ThinkPHP框架及Linux環境搭建的網站&#xff0c;經常會遭遇緩存文件寫入失敗的錯誤提示&#xff0c;即便是現在流行的P2P網站程序便是如此&#xff0c;具體解決方法請看下文。Linux下搭建網站提示緩存文件寫入…

什么是CharSequence

CharSequence是一個接口&#xff0c;比較常見的String、StringBuilder、StringBuffer都實現了這個接口。 當我們看到一個API里面有CharSequence的時候&#xff0c;它也是可以被其子類代替的&#xff0c;一般用String代替即可。

你真的了解顯卡嗎?顯卡基礎知識大掃盲

??作者主頁&#xff1a;IT技術分享社區 ??作者簡介&#xff1a;大家好,我是IT技術分享社區的博主&#xff0c;從事C#、Java開發九年&#xff0c;對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽&#xff1a; 數據庫領域優質創作者&#x1f3c6;&#x…

Servlet的運行方式

通常我們運行servlet需要在web.xml配置文件中&#xff0c;注冊我們寫好的servlet以及其對應的訪問路徑。 在學習web開發中&#xff0c;有一種不需要配置便可以直接對servlet進行配置的方式&#xff0c;在web.xml文件中添加如下代碼&#xff1a; <servlet><servlet-nam…

matlab中select,[轉載]MATLAB閾值獲取函數ddencmp、thselect、wbmpen和w

crit(t)wdcbm的調用格式有以下兩種&#xff1a;(1)[THR,NKEEP]wdcbm(C,L,ALPHA);(2)[THR,NKEEP]wdcbm(C,L,ALPHA,M);函數wdcbm是使用Birge-Massart算法獲取一維小波變換的閾值。返回值THR是與尺度無關的閾值&#xff0c;NKEEP是系數的個數。[C,L]是要進行壓縮或消噪的信號在jle…

使用Redis讓單號從001遞增

最近項目遇到一個需求&#xff0c;單號從001開始遞增 下面用到了redis處理 代碼如下&#xff1a; public String getId() {String key "providerManager";Long incr getIncr(key);if (incr 0) {incr getIncr(key);//從001開始}DecimalFormat df new DecimalF…

硬件知識:直接拔掉USB移動硬盤會對硬盤造成影響嗎?

大家在網上經常可以看到直接拔掉移動硬盤會損壞硬盤的文章。如果說突然拔掉硬盤會造成丟失數據我還有一點相信&#xff0c;但是說會造成損壞硬盤感覺就會有些疑問了。難道USB設備在開始設計時&#xff0c;沒有考慮到熱插拔這個動作&#xff1f; 移動硬盤在通電工作時&#xff0…

php多個構造方法,php多構造器的實例代碼

本節內容&#xff1a;php多構造器的類在php編程中&#xff0c;實例化一個類時&#xff0c;需要根據構造方法的參數個數進行初始化不用的內容&#xff0c;類似php函數或方法的可選參數。來看例子&#xff1a;復制代碼 代碼示例:/*** php 多構造器的類* by www.jbxue.com*/class …

硬件:顯示器接口DP、HDMI、VGA、DVI有什么區別?

??作者主頁&#xff1a;IT技術分享社區 ??作者簡介&#xff1a;大家好,我是IT技術分享社區的博主&#xff0c;從事C#、Java開發九年&#xff0c;對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽&#xff1a; 數據庫領域優質創作者&#x1f3c6;&#x…

判斷2個list中是否有相同的數據(相交)Collections.disjoint

比較兩個集合中是否有相同的元素&#xff0c;發現Collections類下的disjoint方法可以處理 Collections.disjoint() 代碼如下: List<Integer> list3 new ArrayList<>(); list3.add(1); list3.add(1); list3.add(6); List<Integer> list4 new ArrayList<…

java 復雜驗證碼生成,java驗證碼生成種

java驗證碼生成類package cn.edu.pdsu.action;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.util.Random;import javax.imageio.ImageIO;import javax.servlet.ServletOutputStream;import javax.se…

電腦硬件:藍屏的常見解決方案

我們在使用電腦的時候經常會遇到電腦藍屏的故障&#xff0c;這個可以算是電腦故障最頻繁出現的一個了&#xff0c;今天給大家介紹一下電腦藍屏常見的處理辦法&#xff0c;希望能給大家帶來一些 幫助&#xff01; 1、電腦藍屏一般處理辦法 1、先了解發生藍屏前電腦的情況及所做的…

1、Canvas的基本用法

1、Canvas是什么&#xff1f; HTML5 的 canvas 元素使用 JavaScript 在網頁上繪制圖像。 畫布是一個矩形區域&#xff0c;您可以控制其每一像素。 canvas 擁有多種繪制路徑、矩形、圓形、字符以及添加圖像的方法。 2、創建 Canvas 元素 規定元素的 id、寬度和高度&#xff1a; …

用lambda表達式實現Runnable

用lambda表達式實現Runnable lambda表達式替換了原來匿名內部類的寫法&#xff0c;沒有了匿名內部類繁雜的代碼實現&#xff0c;而是突出了&#xff0c;真正的處理代碼。最好的示例就是 實現Runnable 的線程實現方式了: 用() -> {}代碼塊替代了整個匿名內部類 Test public …

java弱引用怎么手動釋放,十分鐘理解Java中的弱引用,十分鐘java引用

十分鐘理解Java中的弱引用&#xff0c;十分鐘java引用本篇文章嘗試從What、Why、How這三個角度來探索Java中的弱引用&#xff0c;幫助大家理解Java中弱引用的定義、基本使用場景和使用方法。由于個人水平有限&#xff0c;敘述中難免存在不準確或是不清晰的地方&#xff0c;希望…

軟件:推薦六款實用的錄頻軟件

??作者主頁&#xff1a;IT技術分享社區 ??作者簡介&#xff1a;大家好,我是IT技術分享社區的博主&#xff0c;從事C#、Java開發九年&#xff0c;對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽&#xff1a; 數據庫領域優質創作者&#x1f3c6;&#x…

安裝 openSUSE Leap 42.1 之后要做的 8 件事

導讀openSUSE Leap 確實是個巨大的飛躍&#xff0c;它允許用戶運行一個和 SUSE Linux 企業版擁有同樣基因的發行版。和其它系統一樣&#xff0c;為了實現最佳的使用效果&#xff0c;在使用它之前需要做些優化設置。下面是一些我在我的電腦上安裝 openSUSE Leap 之后做的一些事情…

Java8 Stream Collectors groupingBy使用

分組List并顯示其總數。 Test public void test8() {//3 apple, 2 banana, others 1List<String> items Arrays.asList("apple", "apple", "banana","apple", "orange", "banana", "papaya");Map…